2016-12-28 21 views
1

Я пытаюсь закодировать сканер портов в python с захватом баннера.Сокет не может установить соединение

Без линии s.send('getBanner\n') (который захватывает баннер) работает мой скрипт, и он печатает открытые порты.

Но когда я добавляю строку 'getBanner', ошибка сокета говорит '[Errn 32] Broken Pipe'.

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

Код:

import socket 

host = '192.168.1.1' 

for port in range(1,1024): 
     s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
     result = s.connect_ex((host, port)) 
     s.send(('getBanner\n')) 
     banner = s.recv(1024) 
     if result == 0: 
       print "[+] Port %s tcp/open" % port 
       print "[+] Banner: %s" % banner 
     s.close() 

ответ

1

Не все порты имеют сервис прослушивания на них, и когда они делают, вы должны следовать любой протокол является нормальным для этой службы. Я предполагаю, что у вас есть какая-то услуга, которая реагирует на «getBanner», но большинство не будет. Вы подключаетесь к вещам, таким как FTP, SSH, DNS, NFS и почтовые серверы, и эти вещи не имеют команд «getBanner». Но вы также пытаетесь подключиться к портам, которые ничего не слушают, и это порождает ошибку.

Глядя на документы:

connect_ex(...) 
    connect_ex(address) -> errno 

    This is like connect(address), but returns an error code (the errno value) 
    instead of raising an exception when an error occurs. 

Ваш звонок соединение возвращает код ошибки, и вы должны проверить, что, прежде чем пытаться отправить запрос. Таким образом, как минимум:

import socket 

host = '192.168.1.1' 

for port in range(1,1024): 
     s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
     result = s.connect_ex((host, port)) 
     if result == 0: 
      s.send(('getBanner\n')) 
      banner = s.recv(1024) 
      if result == 0: 
        print "[+] Port %s tcp/open" % port 
        print "[+] Banner: %s" % banner 
     s.close() 

Но так как большинство серверов прослушивания портов не реагирует на команду «getBanner», его либо повесят или более вероятно подключение рейза сброса ошибок.

+0

Он работал как ожидалось. Благодарю вас за советы. –

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

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