套接字没有在Perl中关闭

时间:2014-01-15 15:14:02

标签: perl sockets

我做了一个简单的脚本来发送一个数据包,我需要读取响应,如果响应是我正在寻找然后打印输出是好的,如果没有打印出来是坏的,现在,如果IP是无所谓,那么脚本工作并打印出它的漏洞。现在,如果它不那么庸俗,那么脚本就会挂起并停止发送HEX数据的有效负载。

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;
}

示例错误:

使用NON vuln ip:

root@localhost:~# perl 2.pl
Connecting..
Connected!

(多数陷入困境)

使用vuln ip:

root@localhost:~# perl 2.pl
Connecting..
Connected!
▒IP IS VULN

(你可以看到它没问题)

这是脚本卡住的地方:

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

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:2)

  • use warnings;
  • 使用eq进行字符串比较,==进行数字比较
  • 您的代码在接收时挂起
  • 默认情况下,
  • recv()没有超时。致电setsockopt并查看this thread了解详情。
  • 最后,永远不要在问题上发布别人的实际知识产权。

答案 1 :(得分:0)

如果您确实检查了它挂在哪里,我相信您会发现它正在尝试接收数据。