2013-03-08 5 views
0

Я пишу сканер портов в C, и я хочу определить, какая служба работает на открытом порту и его версии.
Я уже написал код сканера, но теперь я понятия не имею, как обнаружить запущенный сервис.
Что я могу сделать?C проверить, какая служба запущена на открытом порту

+1

Вы можете проверить это здесь http://en.wikipedia.org/wiki/List_of_TCP_and_UDP_port_numbers – Blood

+0

Рассмотрите известные порты [IANA] (http://www.iana.org/assignments/service-names-port АНОНС/сервис-имена-порта numbers.xml). –

+0

Я знаю, какая услуга * работает * на порте (22-> ssh), но я хотел бы знать: как я могу проверить * наверняка *, какая служба запущена и какая версия. – polslinux

ответ

4

Если вы решили сделать это в своем собственном коде, вы можете подключиться к порту, посмотреть, есть ли у вас какие-либо данные, если ничего не отправить несколько байтов и еще раз проверить.

Затем сопоставьте это с ожидаемым откликом.

Чтобы узнать, что именно вы ищете, вы можете подключиться к порту с помощью telnet и вытолкнуть его. Во многих случаях (веб-сервер - простой пример) вы должны отправить некоторые правильно отформатированные данные, чтобы получить полезный ответ.

птар сделал все это и многое другое (например, обширные проверки, такие как поиск порядка байт и время агр трафика)

UPDATE: несколько людей упоминали, хорошо известные порты, но это не поможет вам открыть стандартные службы, работающие на нестандартных портах, такие как ssh или http-серверы, запущенные на пользовательских портах.

+0

Я согласен со всем здесь, но повторю то, что я сказал в своем комментарии выше: вы не сможете достичь этого со 100% -ной точностью, даже если вы кодируете «минимальные клиенты» для каждого протокола, известного человеку. –

+0

@NikBougalis Абсолютно верно. Способы обнаружения и данные, которые вам нужно отправить, чтобы получить ответ, почти бесконечны. Я бы не предпринял такой проект, кроме как) для развлечения, или б) для собственных пользовательских сервисов, которые nmap не знал бы –

1

Если сервер отправляет что-то в первую очередь, используйте это для идентификации протокола.

Если нет, отправьте что-то в соответствии с каким-либо протоколом, таким как http, и посмотрите, что сервер отправляет обратно (действительный ответ или ошибка). Возможно, вам придется сделать несколько попыток с использованием разных протоколов, и для минимизации количества подключений важно иметь хороший порядок.

Некоторые протоколы могут быть очень трудными для идентификации, и легко создать собственный сервер с уникальным протоколом, о котором вы не знаете, или даже скрыть реальный сервер под простым поддельным сервером других прото, например http.

Если вы просто хотите знать, что такое обычно порт, отметьте "well known ports" и официальным reserved ports.

Также проверьте исходный код nmap.

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

  • Нет связанных вопросов^_^