利用socketphp实现UDP端口扫描

利用socketphp实现UDP端口扫描,php,sockets,udp,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

好的,使用套接字编写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);
问题是它总是返回真(端口打开),即使它关闭

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


谢谢。

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

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

udp
是无连接的。为了确保这一点,您必须发送数据(以接收者理解的方式)并读取响应。@Wrikken请举例说明?谢谢。我发现这个
udp
是无连接的。为了确保这一点,您必须发送数据(以接收者理解的方式)并读取响应。@Wrikken请举例说明?谢谢。我发现了这个。你能提供一个例子或者资源可以帮助我吗?谢谢。目前正在尝试破解一个示例;)可能需要一段时间,会给你一个更新非常感谢,我真的很感激!您可以开始阅读icmp的文档(或者wikipedia文章将为您提供所有类型和代码值以及icmp框架的结构)谢谢,我现在来看看。您可以提供一个示例或参考资料来帮助我吗?谢谢。目前正在尝试破解一个示例;)可能需要一段时间,会给你一个更新非常感谢,我真的很感激!您可以开始阅读icmp的文档(或者wikipedia文章将为您提供所有类型和代码值以及icmp框架的结构)谢谢,我现在来看看。