配方 朋友请进来一下

jinandsun 2002-04-21 12:35:46
pack ("SnC4X8",$PF_INET,$port,@iparray);
pack ("SnA4X8",$PF_INET,$port,@iparray);
为什么有的程序里是A4有的确是C4呢?

...全文
66 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
jinandsun 2002-04-23
  • 打赏
  • 举报
回复
问题基本解决了,给分,大家辛苦了
jinandsun 2002-04-22
  • 打赏
  • 举报
回复
#1
以后问问题,我尽量注意格式,谢谢小肯和beckheng的建议,程序确实很乱。我知道,在一次抱歉,进入正文》》》》
--------------------------------------------------------------------
perl2exe 编译后在我调用的LOG文件中没有出现,在没有编译前的运行的LOG文件出现错误Error - Unable to connect: Unknown error
我很是纳闷,为什么没出现呢?都是一样的程序,只不过一个是编译了另一个没有编译,虽然没有出现错误,但是程序好象在网络方面还是一定有错误的,我的机器上有IIS,而且没有打过补丁,U漏洞等都有,我漏洞库存里也添加了,但是还是没有扫描到,我想还是我在套节子那块没高明白。
------------------------------------------------------------------
2#

我不是就是为了实现这个程序的,我只是想同过这个多学点东西,我想用IO::SOCKET和SOCKET模块都很容易做到这个程序,但是我想试着不用,就是为了多学点比较地层点的,但是麻烦不断。

----------------------------------------------------------------

3#

小肯我程序中并没有你说的函数gethostbyname ,我用的是getprotobyname函数的,这个也是错了的吗?
------------------------------------------------------------------
4#

bind IP 不可以根据输入的IP然后进行转化后的2进制的进行绑定的客户端吗?这样绑定有可能出错吗?不绑定kernel分配的是INTERNET的IP地址吧,如果我想用127。0。0。1进行测试,如果不进行绑定是不是不可以呢?

------------------------------------------------------------------

5#
“如果用到 name-base 的话”你的这句话指的是什么呢?
我没想明白
-----------------------------------------------------------------

希望小肯,配方等再次希望不吝点拨
peifang 2002-04-22
  • 打赏
  • 举报
回复
标准写法是这样
$proto=getprotobyname ('tcp');
$iaddr = gethostbyname('www.sina.com.cn');
$sin = sockaddr_in($port, $iaddr);
socket(SOCKET,AF_INET,SOCK_STREAM,$proto);
connect(SOCKET,$sin);

如果用pack是这样
$proto=getprotobyname ('tcp');
$iaddr = gethostbyname('www.sina.com.cn');
$sin = pack('SnA4x8',AF_INET,$port,$iaddr);#这里就用A4了。
socket(SOCKET,AF_INET,SOCK_STREAM,$proto);
connect(SOCKET,$sin);

或者
$proto=getprotobyname ('tcp');
$sin = pack('SnC4x8',AF_INET,$port,split(/\./,"127.0.0.1"));#这里就用C4了.A4一般把字符串做定长处理,不足补null而已?。
socket(SOCKET,AF_INET,SOCK_STREAM,$proto);
connect(SOCKET,$sin);

不要自己定义什么SOCK_STREAM和PF_INET值或者AF_INET,它们都是由Socket包定义的常量。

另外,你的程序出错是因为昨天我说错了一个地方,应该用split(/\./)而不是split(".")
jinandsun 2002-04-22
  • 打赏
  • 举报
回复
那个错误,我解决了
但是程序运行的很慢
不知道为什么??
将近5分肿才能提交一个漏洞的请求
netken 2002-04-22
  • 打赏
  • 举报
回复
不好意思,没看清楚。。。。
若是在名称解析,或想得到对方详细信息的时候( name,alias .. )gethostbyname 还有些用处;)
bind 在做 client 的时候没有必要,kernel 会自己按路由表分配到 server 的 ip.port 的,除非你想自己定一个 port ,不然设置起来,倒容易出错了。
不妨去掉了再试试看?
netken 2002-04-22
  • 打赏
  • 举报
回复
不好意思,没看清楚。。。
若使用名称的话,或想得到关于对方主机的详细信息,name.alias 等,才用到 gethostbyname .
bind 在做client 的时候没有必要,client 的 ip 是 kernel 根据路由表来分配的,不会有错。若自己指定,就很难说了。
不妨把 bind 去掉再试试看?
jinandsun 2002-04-22
  • 打赏
  • 举报
回复
system ("notepad","log.txt");#调用记事本,打开LOG文件,查看历史记录
exit(1);#程序退出
在程序的最后调用这个的时候出现错误的消息的,配方说的我都明白了,但现在我正在试着解决这个问题
beckheng 2002-04-22
  • 打赏
  • 举报
回复
其實我還是想問的就是﹐下面的一段話是在log.txt文件里面的嗎﹖如果是的話我想知道下面的錯誤消息是在哪里寫入文件的呢﹖我好像找不到相關的語句。其實gethostbyname的參數除了可以是形如www.sina.com.cn這樣的域名外還可以是形如61.143.0.172的IP格式﹗

Scanning 127.0.0.1 port 80

Error - Unable to connect: Unknown error
beckheng 2002-04-22
  • 打赏
  • 举报
回复
就截個圖吧。
jinandsun 2002-04-22
  • 打赏
  • 举报
回复
Scanning 127.0.0.1 port 80

Error - Unable to

connect: Unknown error

错误消息和以前还是一样,
jinandsun 2002-04-22
  • 打赏
  • 举报
回复
to :beckheng(☆碧恒☆)
是用我发给你的那个试的吗?如果是的话,我机器确实有这个的,要我我做个截图给大家看一下,为什么我这里有你那里没呢?如果不是你运行我发给你的一个是编译的还有那个没编译的东西,你运行看看,我运行是编译的没有错误消息,也就是说最后打开LOG文件内容为空,运行脚本的就会在最后调用的LOG文件中出现那个错误的消息
------------------------------------------------
还有我的机器上在按照配方昨天改完的后,我打开天网(防火墙)这时我的程序
运行,天网出来提示筐 是否润许TCP传输,这是不是说明我的SOCKET建立成功,但IP格式不对,所以程序无法正确的做出扫描的判断呢?
------------------------------------------------
to:谢谢肯兄,你说的我明白了,下午我在改改程序,看能否在出现错误消息了
------------------------------------------------
我又把程序改了一点,我想基本上没有以前的错误了,
但是程序运行到最后还是那样,也扫不到漏洞,错误消息还是有
#!c:\perl.exe
print "请输入要测试的IP地址,确认请输入Y,否请输入N==>[y/n]";
chomp($input=<STDIN>);
if ($input=~/y/i){
chomp($ip=<STDIN>);
}else{
print "input a ip";
exit(1);
}
print "向漏洞库添加新的BUG ?[y/n]";
chomp($newbugyn=<STDIN>);
if ($newbugyn=~/y/i) {
chomp($newbug=<STDIN>);
open (BUG,">>bug.txt")||&error;
print BUG "\n$newbug";
&connects;
close (BUG);
}else{
&connects;

}

sub connects {
$port=80;
$PF_INET=2;
$SOCK_STREAM=1;
$unbarry='S n C4 x8';
$port=80;
@ips=split (/\./,$ip);
$adrs=pack ($unbarry,$PF_INET,$port,@ips);
$proto=getprotobyname ('tcp');
socket(SOCKET,$PF_INET,$SOCK_STREAM,$proto)|| die "ddd :$!";
print "正在连接请等待........\n";
print "正在收集服务器资料\n";
connect(SOCKET,$adrs)|| die "canit :$!";
print "连接成功\n";
$|=1;
print SOCKET "GET HTTP/1.0\n\n";
print "写如成功\n";
open (BUG,"bug.txt")||&error;
while ($new=<SOCKET>) {
print "\n$new";
}

while ($wbug=<BUG>) {

print SOCKET "$wbug";
$|=1;
$fettle=<SOCKET>;
if (grep/200/,$fettle){
print "\a\a\a发现CGI漏洞:->$wbug...........";
close LOG;
open (LOG,">>log.txt");
print LOG "server:->$ip have a bug $wbug";
}else{
print "\n扫描程序scaner没有在服务器$ip探测到任何BUG";

close LOG;
}
}
close SOCKET;
}
system ("notepad","log.txt");
exit(1);
sub error {
print "error :can't file\n";
print "请从新运行程序\n";
exit (1);
}



####################################################################
# #
#最后要说的是谢谢大家拿出宝贵的时间来帮我,这里在次感谢各位热心的朋友们 #
# #
####################################################################
beckheng 2002-04-22
  • 打赏
  • 举报
回复
我試過了﹐沒有出現你所說的錯誤啊。
真見鬼﹗
jinandsun 2002-04-21
  • 打赏
  • 举报
回复
我现在好好看看你的回复,明天可能还有问题,请在关注一下,谢谢,我有点头痛了,不好意思
jinandsun 2002-04-21
  • 打赏
  • 举报
回复
不好意思,小肯兄,下次一定注意,由于这次比较急请见量
netken 2002-04-21
  • 打赏
  • 举报
回复
另,一个小小的建议,再贴代码前,最好能把格式整理一下,还有一些语句规范一下,比如有 open 了,最好也加上 close ,一个段落开头有几个 tab 做成固定的,也就是把层次分的清楚一些,注释呢,按 beckheng 提的,尽力用 english 吧,或者最好能把注释符和前面的语句间隔一个空格 or tab ,可能会更容易分析;)
netken 2002-04-21
  • 打赏
  • 举报
回复
确认 perl2exe 编译后就没有错误?
gethostbyname 返回的第一个参数应该是主机名吧?
那么在 socket 中使用应该不大对吧?
另外 bind 好象没有必要啊,如果对自己做测试的话,那么 kernel 自然会分配一个到本机 ip 的路由ip ,这应该交给 kernel 来处理,毕竟不是 server 吗;)
而且如果 bind ip 绑错了,那自然是连不上的。

gethostbyname 若没什么用,大可以去掉
如果用到 name-base 的话,才用的着这个东西吧,也就需要最后的四个值
做为 $ipA.$ipB.$ipC.$host 用... ...
jinandsun 2002-04-21
  • 打赏
  • 举报
回复
不过用PERL2EXE编译后就没有这个错误,不过程序运行时却找不到BUG,但机器上确实有漏洞库存里的BUG,不知道这个为什么老是报错,那块有问题呢?
大家支援以下,不胜感激,我是一个刨根问底的人,不会的话会很不舒服,请大家不要见意我的缺点,还有我袄问,但是我找过我手里的资料确实没有办法解决
beckheng 2002-04-21
  • 打赏
  • 举报
回复
是不是有時會出現這種錯誤﹖
jinandsun 2002-04-21
  • 打赏
  • 举报
回复
#!c:\perl.exe
print <<"EOF";
_______\\__
(_. _ ._ _/
'-' \__. /
/ /
/ / .--. .--.
( ( / '' \/ '' \ "
\ \_.' \ )
|| _ './
|\ \ ___.'\ /
'-./ .' \ |/
\| / )|\
|/ // \\
|\ __// \\__
//\\ /__/ \__|
.--_/ \_--.
/__/ \__\骆驼具有顽强的生命力
请热爱骆驼,热爱perl
###################################################################
# The CGI scaner V0.6 #
# welcome our tearm WWW on http://heihoo.com #
# my homepage http://www.f4school.tk #
# oicq :27441599 #
# by bloves 2002/4/16 reallovesun #
###################################################################
EOF
print "请输入要测试的IP地址,确认请输入Y,否请输入N==>[y/n]";
chomp($input=<STDIN>);
if ($input=~/y/i){#看是否匹配Y
chomp($ip=<STDIN>);#删除换行字符
}else{
print "input a ip";
exit(1);
}
print "向漏洞库添加新的BUG ?[y/n]";#象漏洞库存添加新漏洞
chomp($newbugyn=<STDIN>);#删除换行字符
if ($newbugyn=~/y/i) {#做匹配过滤,
chomp($newbug=<STDIN>);
open (BUG,">>bug.txt")||&error;#打开BUG的数据库文件
print BUG "\n$newbug";#做添加
&connects;#发送请求的子例成
close (BUG);#关闭BUG数据文件句并
}else{#如果不添加新漏洞的话,直接用以前的原有的漏洞数据库
open (BUG,"bug.txt")||&error;#打开漏洞的数据库
&connects;#发送请求的子例程

}

sub connects {#发送请求的子例呈
$port=80;#定义端口为80
$PF_INET=2;#使用INTERNET套节子常量PF_INET,把他定义为2
$SOCK_STREAM=1;#定义套节子类型(TYPE),TCP应用程序使用的类型SOCK_STREAM
$unbarry='S n C4 x8';#定义把准备把PORT和IP转换为2进制结构的形式
$port=80;
@ips=split ('.',$ip);#把IP分割成4个小于255的整数,放在数组中
$adrs=pack ($unbarry,$PF_INET,$port,@ips);#用PACK进行转换成2进制形式
$proto=getprotobyname ('tcp');#得到协议号
socket(SOCKET,$PF_INET,$SOCK_STREAM,$proto);#建立SOCKET套节子
bind (SOCKET,$adrs);#绑定本机地址,可以用本机做测试
connect(SOCKET,$adrs);#连接套节子
print "正在连接请等待........\n";
print "正在收集服务器资料\n";
$|=1;#关闭缓冲,一边能及时输出返回的数据,刷新
print SOCKET "GET HTTP/1.0\n\n";#写数据到远程机器,请求服务器的资料

while ($new=<SOCKET>) {#读取返回的资料,循环打印
print "\n$new";
}
while ($wbug=<BUG>) {#循环所有数据库里的BUG资料

print SOCKET "$wbug";#发送请求,看是否存在这个请求的BUG
$|=1;#关闭缓冲
$fettle=<SOCKET>;#读取是否是正确的请求到了BUG
if (grep/200/,$fettle){#用GREP搜索,看是否返回正确的状态码200,如过是表示存在此漏洞
print "\a\a\a发现CGI漏洞:->$wbug...........";#发出警报
open (LOG,">>log.txt");#打开LOG文件
print LOG "server:->$ip have a bug $wbug";#象日志文件写这个BUG的名字
}else{#否则象LOG写没有找到这个服务器的这个BUG
print LOG "\n扫描程序scaner没有在服务器$ip探测到任何BUG";

close LOG;#关闭LOG文件句柄
}
}
close SOCKET;#关闭套节子句柄
}
system ("notepad","log.txt");#调用记事本,打开LOG文件,查看历史记录
exit(1);#程序退出
sub error {#错误提示的子例程
print "error :can't file\n";
print "请从新运行程序\n";
exit (1);
}
-------------------------------------------------------------------------------------我按照你的回复做了,但是程序还是有那个错误,的
我想是我程序写的比较乱,你看的不仔细吧,所以我写了一个我的注释,帮我看看,
程序很烂,请别见议
错误还是返回这个
Scanning 127.0.0.1 port 80

Error - Unable to connect: Unknown error

2,203

社区成员

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

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