我只是想检查一个特定的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(端口打开),即使它已关闭。
有什么问题?有什么想法吗?
感谢。
答案 0 :(得分:1)
您需要将空UDP帧发送到相关端口并检查ICMP响应。如果您获得ICMP类型2,代码3(端口不可达),则端口关闭。如果您收到其他代码,如type3,代码1,2,9,10或13),则会过滤端口。如果您收到数据或至少没有收到ICMP响应,则可以假定端口已打开,但是,如果没有ICMP响应,则不确定该端口是否已打开。