UDP端口扫描程序使用socket php

时间:2013-12-01 21:28:41

标签: php sockets udp

好吧,使用套接字很容易编写TCP端口扫描程序,但我不知道为什么UDP很难相同

我只是想检查一个特定的UDP端口(比如端口500)是否打开。

这是我的代码:

$ip = '103.12.9.209';
$port = '500';

$socket = socket_create(AF_INET, SOCK_DGRAM, SOL_UDP);

$result = socket_connect($socket, $ip, $port);

if ($result)
{
    echo "Port is on";
}
else
{
    echo "Port is off";
}

socket_close($socket);

问题是它总是返回true(端口打开),即使它已关闭。

有什么问题?有什么想法吗?

感谢。

1 个答案:

答案 0 :(得分:1)

您需要将空UDP帧发送到相关端口并检查ICMP响应。如果您获得ICMP类型2,代码3(端口不可达),则端口关闭。如果您收到其他代码,如type3,代码1,2,9,10或13),则会过滤端口。如果您收到数据或至少没有收到ICMP响应,则可以假定端口已打开,但是,如果没有ICMP响应,则不确定该端口是否已打开。