2013-12-01 4 views
1

нормально, это легко код TCP порт сканера с помощью разъема, но я не знаю, почему это трудно быть одинаковым для UDPUDP сканер портов с помощью сокетов PHP

Я просто хочу, чтобы проверить, определенного 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); 

Проблема заключается в том, что всегда возвращает истину (порт включен), даже он выключен.

В чем проблема? любая идея, пожалуйста?

Спасибо.

+2

'udp' - без установления связи. Чтобы убедиться, вам придется отправлять данные (в соответствии с пониманием получателя) и читать ответ. – Wrikken

+0

@Wrikken любой пример пожалуйста? Благодарю. – user3001517

+1

Я нашел эту [полезную ссылку] (http://www.speedguide.net/faq_in_q.php?qid=173) – user2203703

ответ

1

Вам необходимо отправить пустой фрейм UDP в соответствующий порт и проверить ответы ICMP. Если вы получите ICMP тип 2, код 3 (порт недоступен), то порт будет закрыт. Если вы получаете другие коды типа 3, код 1,2,9,10 или 13), порт фильтруется. Если вы получаете данные или, по крайней мере, не получаете ответы ICMP, можно предположить, что порт открыт, но, если нет ответов ICMP, он не уверен, что порт открыт.

+0

Не могли бы вы привести пример или ресурсы, которые могут мне помочь? Спасибо. – user3001517

+0

В настоящее время пытается взломать пример;) может занять некоторое время, даст обновление – hek2mgl

+0

Большое спасибо, я очень ценю это! – user3001517

Смежные вопросы