Tiger_cn
Perl:一段扫描url的代码,请教
不明白其中的IO::Socket模块是如何发送包的?
源代码如下
[table=95%][tr][td][font=FixedSys][color=#000000][color=#FF9900]#!/usr/bin/perl
[/color]
[color=#0000FF]use[/color] strict[color=#0000CC];[/color]
[color=#0000FF]use[/color] IO[color=#0000CC]:[/color][color=#0000CC]:[/color][color=#FF0000]Socket[/color][color=#0000CC];[/color]
[color=#FF0000]print[/color] [color=#FF00FF]"---------------------------------------------------------------------/n"[/color][color=#0000CC];[/color]
[color=#FF0000]print[/color] [color=#FF00FF]"/tCode By [kingwrcy]/tMSN:kingwrcy/@qq.com/n"[/color][color=#0000CC];[/color]
[color=#FF0000]print[/color] [color=#FF00FF]"---------------------------------------------------------------------/n"[/color][color=#0000CC];[/color]
[color=#0000FF]if[/color] [color=#0000CC]([/color][color=#0000FF]@[/color][color=#808000]ARGV[/color] [color=#0000CC]![/color][color=#0000CC]=[/color] 1[color=#0000CC])[/color] [color=#0000CC]{[/color]
[color=#FF0000]print[/color] [color=#FF00FF]"Paramter is error./n"[/color][color=#0000CC];[/color]
[color=#FF0000]exit[/color][color=#0000CC];[/color]
[color=#0000CC]}[/color]
[color=#0000FF]my[/color] [color=#0000FF]$[/color][color=#008080]address[/color] [color=#0000CC]=[/color] inet_ntoa[color=#0000CC]([/color]inet_aton[color=#0000CC]([/color][color=#0000FF]$[/color][color=#008080]ARGV[/color][color=#0000CC][[/color]0[color=#0000CC]][/color][color=#0000CC])[/color][color=#0000CC])[/color] [color=#0000FF]or[/color] [color=#FF0000]die[/color] [color=#FF00FF]"Can't resolve host../n"[/color][color=#0000CC];[/color]
[color=#FF0000]open[/color][color=#0000CC]([/color]MYFILE[color=#0000CC],[/color][color=#FF00FF]"c://1.TXT"[/color][color=#0000CC])[/color] [color=#0000FF]or[/color] [color=#FF0000]die[/color] [color=#FF00FF]"can't read file/n"[/color][color=#0000CC];[/color]
[color=#0000FF]my[/color] [color=#0000FF]@[/color][color=#808000]allDir[/color] [color=#0000CC]=[/color] [color=#0000CC]<[/color]MYFILE[color=#0000CC]>[/color][color=#0000CC];[/color]
[color=#0000FF]my[/color] [color=#0000FF]$[/color][color=#008080]count[/color] [color=#0000CC]=[/color] 0[color=#0000CC];[/color]
[color=#0000FF]foreach[/color] [color=#0000FF]my[/color] [color=#0000FF]$[/color][color=#008080]myDir[/color] [color=#0000CC]([/color][color=#0000FF]@[/color][color=#808000]allDir[/color][color=#0000CC])[/color] [color=#0000CC]{[/color]
[color=#FF0000]chop[/color][color=#0000CC]([/color][color=#0000FF]$[/color][color=#008080]myDir[/color][color=#0000CC])[/color][color=#0000CC];[/color]
[color=#0000FF]my[/color] [color=#0000FF]$[/color][color=#008080]sendBuf[/color] [color=#0000CC]=[/color] [color=#FF00FF]"GET $myDir HTTP/1.1/n"[/color][color=#0000CC].[/color]
[color=#FF00FF]"Host: $ARGV[0]/n/n/n"[/color][color=#0000CC];[/color]
[color=#0000FF]my[/color] [color=#0000FF]$[/color][color=#008080]socket[/color] [color=#0000CC]=[/color] IO[color=#0000CC]:[/color][color=#0000CC]:[/color][color=#FF0000]Socket[/color][color=#0000CC]:[/color][color=#0000CC]:[/color]INET[color=#0000CC]-[/color][color=#0000CC]>[/color]new[color=#0000CC]([/color]PeerAddr [color=#0000CC]=[/color][color=#0000CC]>[/color] [color=#0000FF]$[/color][color=#008080]address[/color][color=#0000CC],[/color]
PeerPort [color=#0000CC]=[/color][color=#0000CC]>[/color] 80[color=#0000CC],[/color]
Proto [color=#0000CC]=[/color][color=#0000CC]>[/color] [color=#FF00FF]"tcp"[/color][color=#0000CC],[/color]
Type [color=#0000CC]=[/color][color=#0000CC]>[/color] SOCK_STREAM[color=#0000CC])[/color]
[color=#0000FF]or[/color] [color=#FF0000]die[/color] [color=#FF00FF]"Couldn't connect to $ARGV[0] : $@/n"[/color][color=#0000CC];[/color]
[color=#FF0000]print[/color] [color=#0000FF]$[/color][color=#008080]socket[/color] [color=#0000FF]$[/color][color=#008080]sendBuf[/color][color=#0000CC];[/color]
[color=#0000FF]my[/color] [color=#0000FF]$[/color][color=#008080]buf[/color] [color=#0000CC]=[/color] [color=#0000CC]<[/color][color=#0000FF]$[/color][color=#008080]socket[/color][color=#0000CC]>[/color][color=#0000CC];[/color]
[color=#0000FF]if[/color][color=#0000CC]([/color][color=#0000FF]$[/color][color=#008080]buf[/color] [color=#0000CC]=[/color][color=#0000CC]~[/color][color=#0000CC]/[/color][color=#0000CC]/[/color]b200/b[color=#0000CC]/[/color] [color=#0000FF]or[/color] [color=#0000FF]$[/color][color=#008080]buf[/color][color=#0000CC]=[/color][color=#0000CC]~[/color][color=#0000CC]/[/color][color=#0000CC]/[/color]b401/b[color=#0000CC]/[/color][color=#0000CC])[/color][color=#0000CC]{[/color]
[color=#FF0000]print[/color] [color=#FF00FF]"Exist:$ARGV[0]$myDir/n"[/color][color=#0000CC];[/color]
[color=#0000FF]$[/color][color=#008080]count[/color][color=#0000CC]+[/color][color=#0000CC]+[/color][color=#0000CC];[/color]
[color=#0000CC]}[/color]
[color=#FF0000]close[/color] [color=#0000FF]$[/color][color=#008080]socket[/color][color=#0000CC];[/color]
[color=#0000CC]}[/color]
[color=#FF0000]close[/color] MYFILE[color=#0000CC];[/color]
[color=#FF0000]print[/color] [color=#FF00FF]"/tAll Done! Find $count directory...Good Luck./n"[/color][color=#0000CC];[/color][/color][/font][/td][/tr][/table][/code]
apile
[quote]原帖由 [i]Tiger_cn[/i] 于 2008-5-12 22:09 发表 [url=http://bbs.chinaunix.net/redirect.php?goto=findpost&pid=8366857&ptid=1097380][img]http://bbs.chinaunix.net/images/common/back.gif[/img][/url]
这其中的
my $socket = IO::Socket::INET->new(PeerAddr => $address,
以及
my $sendBuf = "GET $myDir HTTP/1.1/n".
my $buf = ;
都是如何工作 求教! [/quote]
有一个模拟上面行为的方法..
找台linux/unix...
然後用
telnet ip_address port
例如
telnet 10.1.1.1 80
连上後..输入
GET /index.html 按两下enter..
以上所有动作...等於你代码中所有的动作........
你可以先研究看看HTTP与Socket...
apile
[quote]原帖由 [i]Tiger_cn[/i] 于 2008-5-13 20:37 发表 [url=http://bbs.chinaunix.net/redirect.php?goto=findpost&pid=8372918&ptid=1097380][img]http://bbs.chinaunix.net/images/common/back.gif[/img][/url]
我知道等于我代码中的所有内容 但是不知道其中的对应关系 [/quote]
在这里等别人告诉你...
为甚麽不先试着自己去了解一下...真的不懂再上来问...
都已经跟你说去看一下什麽是Socket..与HTTP protocol...
难道要写一大篇跟你解释吗?