2013-11-23 5 views
0

Я хотел бы подробно остановиться на this question и, в частности, на this answer. Предположим, у меня есть фиксированный список сервисов для проверки, например: ('ftp', 'ssh', 'http'). Открытие сокета к порту 22 удаленного сервера:Идентификация служб, прослушивающих удаленные порты

import socket 

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
result = s.connect_ex(('my_remote_server', 22)) 

if(result == 0) : 
    print s.recv(256) 
s.close() 

я получаю следующий результат:

'SSH-2.0-OpenSSH_6.1p1 Debian-4\r\n' 

Так что я могу догадаться, что есть служба SSH прослушивает этот порт. Поэтому мой вопрос: где и как я могу найти приветственные сообщения (или аналогичные) для различных видов услуг? Связаны ли они с этим? В случае ssh всегда ли он начинается с SSH-?

ответ

1

Ответ, полученный с сервера, зависит как от точного протокола, так и от конфигурации сервера.

HTTP имеет Server заголовок, например, но многие сервера на интернет лежит о том, что в ответ сервера, чтобы сбросить вредоносных хакеров, пытающихся использовать серверные специфические недостатки. Кроме того, сервер остается молчаливым до тех пор, пока клиент не отправит запрос; ваш код должен отправить что-то, прежде чем появится какой-либо ответ.

Лучшее, что вы можете сделать, это попробовать различные протоколы и посмотреть, отвечает ли другая сторона разумно. Например, попытка отправить SSH-сообщение на порт HTTP может привести к ответу HTTP/1.0 400 Bad Request.

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

+0

Хорошо, мне нужно будет планировать, какие службы я буду поддерживать, а затем проверить эвристику, чтобы обнаружить эти службы. –

1

Лучшее, что вы можете сделать, это, вероятно, поиск строки ssh (/ ftp/http) и заключение на основе этого. Даже это было бы предположение, конечно, поскольку это обычно можно изменить (см. here) с параметром конфигурации, и считается хорошей практикой обеспечения безопасности, чтобы изменить его, чтобы не выставлять серверную программу/версию.

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