分享

使用PERL打造connect扫描器

 老庄走狗 2006-06-13


writer:demonalex
email:demonalex@hackermail.com


    想不到现在的‘冲击波’系列蠕虫蔓延得比‘SARS’(非典型肺炎)还要快,导致许多网络的网管都把ICMP给禁止掉了。
在论坛里的网友们都在为找个‘小肉机’而弄得‘沸腾’起来。
“PING不到,怎么知道那台机器在线哪台机器不在线啊....?”
经验老到的网友就会‘祭’出X-SCAN,使用“无条件扫描’,噢,有‘东西’看了......
“为什么可以扫到呢?”笔者小神QQ里又有‘好友’的信息跳出来了......
    如果您是玩过SOCKET的人您当然不会问我了。其实楼上问的只是简单的SOCKET CONNECT扫描而已。
    说说SOCKET扫描吧,其实SOCKET扫描有很多种,主要有针对低层的IP扫描(PING就是其中一种,用的是ICMP包),和针对
高层的(TCP,UDP)。而我们通常扫TCP端口的就是connect扫描、SYN扫描、FIN扫描这三种了(connect扫描与SYN扫
描可以使用X-SCAN,FIN扫描可以使用NMAP)。
    说说最常用的connect扫描吧,它的原理就是调用SOCKET API(套接字应用程序接口)中的connect()直接向远程
机器发送连接请求,并通过套接字是否能建立连接来辨别其端口的状态。它的特点是:速度慢,容易被对方发现,但准
确性高。
    “不用扫描器能使用connect扫描吗?”
    可以,不过不能光依赖系统,系统并没有提供调用SOCKET API的程序,能操作SOCKET API就只能依赖有SOCKET API接口
的编程语言了。在笔者眼里玩SOCKET最方便的就莫过于PERL了。现在示范一下如何使用Perl中的IO::Socket包写单端口CON-
NECT扫描器吧(楼下‘#‘符号后为注释部分):

#!usr/bin/perl -w                                  #PERL程序开头标式
use IO::Socket;                                    #载入IO::Socket包
$remote_host=$ARGV[0];                             #程序后紧跟的第一个参数为远程主机地址
$remote_port=$ARGV[1];                             #第二个参数为所要探测远程主机的端口
$sock=IO::Socket::INET->new(PeerAddr=>$remote_host,PeerPort=>$remote_port,Timeout=>60);
#楼上一行为新建一个IO::Socket::INET对象$sock,其参数PeerAddr为远程主机地址,参数PeerPort
#为需要探测的远程主机端口,参数‘超时值’Timeout为60秒
if(defined $sock){                                 #进入条件语句,辨别$sock对象是否已被定义
print("The $remote_host -> $remote_port is opened!\n");  #被定义了,屏幕提示此主机的此端口打开
$sock->close;                                      #关闭SOCKET对象
}else{                                             #条件语句的值为‘非’时
print("The $remote_host -> $remote_port is closed!\n");  #提示此主机的此端口没有打开
}
exit 1;                                            #退出程序

讲解:楼上程序的第一行与倒数最后两行其实可以不写,只是笔者为了程序的可移植性与写C程序的作风而‘硬’加上去的,
大家可以不写。第二行载入IO::Socket包是必要的,不加载此包的话就无法定义IO::Socket::INET对象了。数组@ARGV为
PERL的保留数组,用于表示使用程序时后面紧跟的参数的。条件语句中使用‘是否定义了SOCKET对象’作为辨别条件是因
为建立SOCKET对象时其实已经调用了connect()了,所以只要辨别楼上已建立的SOCKET对象变量$sock是否被定义了就可以
知道连接是否成功了。
    完成了。那如何做一个可以扫描一个IP段的端口或扫描同一IP的一个端口段的connect()扫描程序呢?聪明的您应该会
想到循环语句了吧?!由于本文的篇幅有限,小神就不再对此多说了,如果您想知道更多的资料或了解更多关于PERL与PERL
SOCKET API的知识的话,可以到小神的主页http://demonalex.去看看哦:)

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多