Я пишу сканер портов в C, и я хочу определить, какая служба работает на открытом порту и его версии.
Я уже написал код сканера, но теперь я понятия не имею, как обнаружить запущенный сервис.
Что я могу сделать?C проверить, какая служба запущена на открытом порту
ответ
Если вы решили сделать это в своем собственном коде, вы можете подключиться к порту, посмотреть, есть ли у вас какие-либо данные, если ничего не отправить несколько байтов и еще раз проверить.
Затем сопоставьте это с ожидаемым откликом.
Чтобы узнать, что именно вы ищете, вы можете подключиться к порту с помощью telnet и вытолкнуть его. Во многих случаях (веб-сервер - простой пример) вы должны отправить некоторые правильно отформатированные данные, чтобы получить полезный ответ.
птар сделал все это и многое другое (например, обширные проверки, такие как поиск порядка байт и время агр трафика)
UPDATE: несколько людей упоминали, хорошо известные порты, но это не поможет вам открыть стандартные службы, работающие на нестандартных портах, такие как ssh или http-серверы, запущенные на пользовательских портах.
Я согласен со всем здесь, но повторю то, что я сказал в своем комментарии выше: вы не сможете достичь этого со 100% -ной точностью, даже если вы кодируете «минимальные клиенты» для каждого протокола, известного человеку. –
@NikBougalis Абсолютно верно. Способы обнаружения и данные, которые вам нужно отправить, чтобы получить ответ, почти бесконечны. Я бы не предпринял такой проект, кроме как) для развлечения, или б) для собственных пользовательских сервисов, которые nmap не знал бы –
Если сервер отправляет что-то в первую очередь, используйте это для идентификации протокола.
Если нет, отправьте что-то в соответствии с каким-либо протоколом, таким как http, и посмотрите, что сервер отправляет обратно (действительный ответ или ошибка). Возможно, вам придется сделать несколько попыток с использованием разных протоколов, и для минимизации количества подключений важно иметь хороший порядок.
Некоторые протоколы могут быть очень трудными для идентификации, и легко создать собственный сервер с уникальным протоколом, о котором вы не знаете, или даже скрыть реальный сервер под простым поддельным сервером других прото, например http.
Если вы просто хотите знать, что такое обычно порт, отметьте "well known ports" и официальным reserved ports.
Также проверьте исходный код nmap.
Вы можете проверить это здесь http://en.wikipedia.org/wiki/List_of_TCP_and_UDP_port_numbers – Blood
Рассмотрите известные порты [IANA] (http://www.iana.org/assignments/service-names-port АНОНС/сервис-имена-порта numbers.xml). –
Я знаю, какая услуга * работает * на порте (22-> ssh), но я хотел бы знать: как я могу проверить * наверняка *, какая служба запущена и какая версия. – polslinux