2014-01-15 14 views
0

那么我做了一个简单的脚本来发送一个数据包,我需要读取响应,如果响应是我在寻找然后打印出来是好的,如果不打印出来是坏的,现在如果ip is vuln,那么脚本就可以工作并打印出它的阴影。现在,如果它不是恶作剧,那么脚本就会挂起,并且发送HEX数据的有效载荷。在Perl中没有关闭的套接字

use IO::Socket; 
use strict; 

print "Connecting..\n"; 
my $socket = IO::Socket::INET->new(
    PeerAddr => '23.113.161.164', # 38.124.108.67 <-- NON vuln ip for testing 
    PeerPort => 123,    # 23.113.161.164 <-- This IS a vuln ip! 
    Proto => 'udp', 
    Timeout => 1); 
die "Error With Sockets!: $!\n" unless $socket; 

print "Connected!\n"; 

my $payload = "\x97\x00\x00\x00\xAA\x00\x00\x00"; 
my $good = "\x97\x00\x00\x00"; 

$socket->send($payload) or die "Nothing got sent."; 

my $data; 
$socket->recv($data,4); 
my $response = substr($data,0,8); 
$response = reverse($response); 
print $response; 

if ($response == "\x97\x00\x00\x00") { 
print "IP IS VULN\n"; 
} else { 
print "IP IS NOT VULN\n"; 
exit; 
} 

例错误:

使用非vuln IP:

[email protected]:~# perl 2.pl 
Connecting.. 
Connected! 

(这就是在那里它被卡住)

使用vuln IP:

[email protected]:~# perl 2.pl 
Connecting.. 
Connected! 
▒IP IS VULN 

(如你可以看到它确实很好)

这是脚本被卡住:

$socket->send($payload) or die "Nothing got sent."; 

任何帮助将不胜感激。

+4

总是使用'使用警告;'。你的代码有一个主要的错误,这将发现。 – ikegami

回答

0

如果你真的检查了它挂在哪里,我相信你会发现它挂着试图收到数据。

2
  • use warnings;
  • 使用eq字符串比较,==数值比较
  • 您的代码挂在收到
  • recv()不,默认情况下,有一个超时。请致电setsockopt,详情请参阅this thread
  • 最后,绝对不要在他人的实际知识产权问题上贴出你的问题。
+0

“最后,绝对不要在问题中发布实际IP地址。”为什么不?如果OP不认为它们是敏感的,那么最好包含它们,这样我们就可以运行他的代码了! – ikegami

+0

假设他们不是他的IP。假设每个人和我的叔叔都运行这个代码。假设机器在这些条件下行为不当并且/或者从试图获得这些代码的怪人那里收到了大量的数据包。你能拼D-O-S吗? –

+0

该节点每小时有16个视图。你认为有多少人会导致代码被执行? – ikegami