用Perl进行简单Socket编程

gamelife 2002-02-07 03:53:19
用Perl进行简单Socket编程
-------------------------------------------------------------------------
作者:TNT.
来源:http://www.cntnsa.com

Perl作为一门强大的网络编程语言,已经被全世界的编程者所认可,无论是进行
CGI开发或者作为Shell都很方便,不过我喜欢perl更多的是为了编写HACK程序.由于
PERL的语法比较易懂,开发速度快,跨平台,无论WINDOWS,UNIX,LINUX只要装有perl解
释器,所写的perl程序一般都能很好的运行----更重要的是perl解释器是免费的!!
你可以到http://www.activeperl.com下载最新的perl解释器.
好,现在我来介绍简单的Perl Socket编程,Socket编程是hacker们的最爱,比如
端口扫描,漏洞检测等等.这里我不讲什么是Socket--因为我写这篇教程的目的是为了
给网络爱好者特别是初学者一个对Socket编程的初步了解,掌握Socket编程的基本的简
单的方法,为以后入侵或者其他的应用打个基础.
好了,现在我们用例程来讲解:
-------------------------------------------------------------------------
网络上有开端口13的服务器,13端口是提供dattime服务的,说白了就是提供当天
时间的服务,我要写的程序就是要连接这台时间服务器,并获取它返回给我的时间信息
按一定的格式打印在屏幕上.
1.首先,用代理猎手或者其他的类似工具(如superscan)扫描一个网段,端口设置为"13"
我这里扫描到的是203.85.114.71,是香港公共图书馆,他开放了daytime服务.
2.telnet上203.85.114.71的13端口,服务器返回"Wed Feb 6 14:28:31 2002 ",
这就是我们想要的东西.
3.好了,开始写perl程序,代码如下:
#==============================
#!/usr/bin/perl
#==============================
# Program_name:Socket_Time.pl
#==============================
# Write by:TNT.
#==============================
# Website:Http://www.cntnsa.com
#==============================
# Email:tnt@cntnsa.com
# or gamelifes@hotmail.com
#==============================

use IO::Socket;

$Socket_time=IO::Socket::INET->new(Proto=>"tcp",PeerAddr=>"203.85.114.71",PeerPort=>"13") or die "\n[Can't connecting to TimeServer....]\n";

while(<$Socket_time>){;
($week,$month,$y,$days,$time,$year)=split(/ /,$_);
chomp $year;
chomp $week;
chomp $month;
chomp $days;
chomp $time;


print<<"EOF";
-----------------
| Socket_Time.pl|
-----------------
|=========================================|
|Year:$year Month:$month Days:$days |
|Week:$week Now Time:$time |
|=========================================|
\\Welcome to:http://www.cntnsa.com//
\\*-*-*Email:tnt\@cntnsa.com*-*-*/
EOF
exit;
};


本程序装载了IO::Socket,这是进行本次Socket编程的前奏,看到
了吗?本程序的核心就是由下面这一句实现的:

$Socket_time=IO::Socket::INET->new(Proto=>"tcp",
PeerAddr=>"203.85.114.71",
PeerPort=>"13") or die "\n[Can't connecting to TimeServer....]\n";

他创建了一个socket连接,Proto=>"tcp"说明本连接使用tcp协议,还有其他的如udp,
lion编写的qqbomber就是使用的udp协议,关于协议这里不多说了,自己买本书看看.

PeerAddr=>"203.85.114.71"说明要连接的服务器ip为:203.85.114.71。

PeerPort=>"13"说明连接服务器的端口为13.

以下那几句是当连接建立后获取服务器返回的信息,并通过split函数将所获得的信息
分别赋值给$week,$month,$y,$days,$time,$year这些变量,变量的用途顾名思义,不用
我解释,其中$y变量不在要输出的变量之列,他获得的服务器返回信息只是一个空格,
当完成这些,就可以打印出如下的结果:

-----------------
| Socket_Time.pl|
-----------------
|=========================================|
|Year:2002 Month:Feb Days:6 |
|Week:Wed Now Time:14:44:55 |
|=========================================|
\Welcome to:http://www.cntnsa.com//
\*-*-*Email:tnt@cntnsa.com*-*-*/

可见已经达到了我的目的^-^.

以上就是一个socket编程的应用实例,当然你可以改一下,做成端口扫描和漏洞扫描的工具^-^. (把他稍微改一下就成了自动从网络时间服务器更新自己计算机的时间的程序了,也算是一点应用吧~~~呵呵~~~~ )
程序下载:
http://tnsa.cntnsa.com/bbs/non-cgi//usr/10_16.zip


...全文
133 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
gamelife 2002-02-17
  • 打赏
  • 举报
回复
大家对不起,这篇文章中的程序有些地方写得不好,我改正一下
--------------------------------------------------------------------
用Perl进行简单Socket编程
--------------------------------------------------------------------作者:TNT.
来源:http://www.cntnsa.com

Perl作为一门强大的网络编程语言,已经被全世界的编程者所认可,无论是进行
CGI开发或者作为Shell都很方便,不过我喜欢perl更多的是为了编写HACK程序.由于
PERL的语法比较易懂,开发速度快,跨平台,无论WINDOWS,UNIX,LINUX只要装有perl解
释器,所写的perl程序一般都能很好的运行----更重要的是perl解释器是免费的!!
你可以到http://www.activeperl.com下载最新的perl解释器.
好,现在我来介绍简单的Perl Socket编程,Socket编程是hacker们的最爱,比如
端口扫描,漏洞检测等等.这里我不讲什么是Socket--因为我写这篇教程的目的是为了
给网络爱好者特别是初学者一个对Socket编程的初步了解,掌握Socket编程的基本的简
单的方法,为以后入侵或者其他的应用打个基础.
好了,现在我们用例程来讲解:
-------------------------------------------------------------------------
网络上有开端口13的服务器,13端口是提供daytime服务的,说白了就是提供当天
时间的服务,我要写的程序就是要连接这台时间服务器,并获取它返回给我的时间信息
按一定的格式打印在屏幕上.
1.首先,用代理猎手或者其他的类似工具(如superscan)扫描一个网段,端口设置为"13"
我这里扫描到的是203.85.114.71,是香港公共图书馆,他开放了daytime服务.
2.telnet上203.85.114.71的13端口,服务器返回"Wed Feb 6 14:28:31 2002 ",
这就是我们想要的东西.
3.好了,开始写perl程序,代码如下:
#==============================
#!/usr/bin/perl
#==============================
# Program_name:Socket_Time.pl
#==============================
# Write by:TNT.
#==============================
# Website:Http://www.cntnsa.com
#==============================
# Email:tnt@cntnsa.com
# or gamelifes@hotmail.com
#==============================

use IO::Socket;

$Socket_time=IO::Socket::INET->new(Proto=>"tcp",PeerAddr=>"203.85.114.71",PeerPort=>"13") or die "\n[Can't connecting to TimeServer....]\n";

while(<$Socket_time>){
($week,$month,$days,$time,$year)=split(/ /,$_);
chomp $year;
chomp $week;
chomp $month;
chomp $days;
chomp $time;

print<<"EOF";
-----------------
| Socket_Time.pl|
-----------------
|=========================================|
|Year:$year Month:$month Days:$days |
|Week:$week Now Time:$time |
|=========================================|
\\Welcome to:http://www.cntnsa.com//
\\*-*-*Email:tnt\@cntnsa.com*-*-*/
EOF
exit;
}

本程序装载了IO::Socket,这是进行本次Socket编程的前奏,看到
了吗?本程序的核心就是由下面这一句实现的:

$Socket_time=IO::Socket::INET->new(Proto=>"tcp",
PeerAddr=>"203.85.114.71",
PeerPort=>"13") or die "\n[Can't connecting to TimeServer....]\n";

他创建了一个socket连接,Proto=>"tcp"说明本连接使用tcp协议,还有其他的如udp,
lion编写的qqbomber就是使用的udp协议,关于协议这里不多说了,自己买本书看看.

PeerAddr=>"203.85.114.71"说明要连接的服务器ip为:203.85.114.71。

PeerPort=>"13"说明连接服务器的端口为13.

以下那几句是当连接建立后获取服务器返回的信息,并通过split函数将所获得的信息
分别赋值给$week,$month,$days,$time,$year这些变量,变量的用途顾名思义,不用
我解释, 当完成这些,就可以打印出如下的结果:

-----------------
| Socket_Time.pl|
-----------------
|=========================================|
|Year:2002 Month:Feb Days:6 |
|Week:Wed Now Time:14:44:55 |
|=========================================|
\Welcome to:http://www.cntnsa.com//
\*-*-*Email:tnt@cntnsa.com*-*-*/

可见已经达到了我的目的^-^.

以上就是一个socket编程的应用实例,当然你可以改一下,做成端口扫描和漏洞扫描的工具^-^.
-----------------------------------------------------------------------
portscan.pl
-----------------------------------------------------------------------

#!/usr/bin/perl
###########################################
#portscanner beta 1.0 #
#Writed by TNT. from http://www.cntnsa.com#
###########################################
use IO::Socket;

($host = $ARGV[0]) || &message;
($portstart=$ARGV[1])||&message2;
($portstop = $ARGV[2])||&message3;

$first = $portstart ;
open (history,">history.txt");

for($port=$first;$port<=$portstop;$port++){
$sock = IO::Socket::INET->new(Proto=>'tcp',PeerAddr=>$host,
PeerPort=>$port);

if($sock){
print history "\nFound port $port open in host: $host !!";
print "\nFound $port in the $host !!";
};
};
close history;

&out;

sub out{
system ("notepad","history.txt");};
sub message{
print "\nplease input a host which you want scan!\a";
print "\nlike this:perl ps.pl www.s8s8.net 80 3389";
close history;
exit;
};
sub message2{
print "\nplease input a start port!\a";
print "\nlike this:perl ps.pl www.s8s8.net 80 3389";
exit;};
sub message3{
print "\nplease input a stop port!\a";
print "\nlike this:perl ps.pl www.s8s8.net 80 3389";
exit;};


-----------------------------------------------------------
另外,在socket_time这个程序exit前加上:
system("time","$time");
就可以实现从网络时间服务器自动校正localtime的应用了,呵呵^-^

gamelife 2002-02-09
  • 打赏
  • 举报
回复
谢谢
k2222hk 2002-02-08
  • 打赏
  • 举报
回复
写的真不错.

2,204

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 CGI
社区管理员
  • CGI社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧