2013-08-06 1 views
0

Я делаю простой сканер портов в PHP и пытаюсь выяснить, как я запрошу имя службы, с которой я подключаюсь, подобно тому, как Nmap может обнаружить Сервисы.Запросить имя службы через TCP-сокет

Я использую fsockopen(), чтобы открыть сокет, поэтому я бы воспользовался fwrite($socket, "WHAT SERVICE AM I COMMUNICATING WITH?"), чтобы задать вопрос, а затем прослушать с помощью fgets($socket).

Как я могу спросить сервис, что это такое?

ответ

1

В программу записано, для чего предназначены разные порты. Удаленные приложения не сообщают об этом. В Интернете есть множество списков, которые предоставляют эту информацию.

То же самое касается стандартных услуг и ответов от аналогичных сервисов на разных ОС. Вот как nmap догадывается, с какой ОС он разговаривает.

Here является достойной отправной точкой.

Here является исходным файлом с отображением портов для nmap.

Страшная часть - это код, который сообщает, какие версии и так работают. Это here и я рад, что не нужно писать так: \

последний, довольно уверен, что это файл, который говорит, как угадать, какая ОС на удаленном компьютере: here

+0

Да, я просто нашел страницу, на которой разработчики Nmap описывают свой метод сканирования сервисов (http://nmap.org/book/vscan-technique.html); это звучит довольно сложно воспроизвести. Я могу решить отказаться от этой функции, я просто писал это для удовольствия. Стоит попробовать, хотя, спасибо! Хотелось бы, чтобы была стандартная команда «версия», которую знали все программы. – user2120415

+0

@ user2120415, просто проверяя, есть ли открытый TCP-порт, очень просто, и вы можете сделать наивные предположения, например, если 22 принимает соединения, тогда SSH работает на сервере. Порт 80? HTTP и т. Д. Вам не нужно сообщать о версиях и т. Д. – xaxxon

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