【问题标题】:UDP port scanner by using socket phpUDP端口扫描器使用socket php
【发布时间】:2013-12-17 12:31:45
【问题描述】:

好的,使用套接字编写 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(端口打开),即使它关闭了。

有什么问题?请问有什么办法吗?

谢谢。

【问题讨论】:

  • udp 是无连接的。为了确保这一点,您必须发送数据(以接收方理解的方式)并读取响应。
  • @Wrikken 有什么例子吗?谢谢。
  • 我找到了这个useful link

标签: php sockets udp


【解决方案1】:

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

【讨论】:

  • 你能提供一个例子或资源可以帮助我吗?谢谢。
  • 目前正在尝试破解示例;)可能需要一段时间,将提供更新
  • 非常感谢,非常感谢!
  • 你可以开始阅读icmp的文档(或者维基百科的文章会给你所有的类型和代码值以及ICMP框架的结构)
  • 谢谢,我现在去看看。
猜你喜欢
  • 2017-12-10
  • 2020-11-01
  • 1970-01-01
  • 2011-04-22
  • 1970-01-01
  • 2013-10-18
  • 2023-03-16
  • 1970-01-01
相关资源
最近更新 更多