Сканер портов Python не вернет баннер

#python

Вопрос:

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

 import socket


s = socket.socket()

def re_banner(ip, port):
    try:
        s.connect((ip, port))
        banner = s.recv(1024).strip()
        return banner
    except socket.error:
        pass
    except:
        raise



def main():
    ip = raw_input("Please enter the IP: ")
    for port in range(1,1000):
        banner = re_banner(ip,port)
        if banner:
            print '[ ]'   ip   '/'   str(port)   ' : '   banner.strip()

main()
 

Комментарии:

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

2. Если возможно (если вы не находитесь в какой-либо рабочей среде), пожалуйста, обновите себя до Python 3 🙂

3. Вы заставляете замолчать socket.error С. Попробуйте удалить это except и посмотрите, даст ли это вам какую-либо информацию

4. Почему вы повторно используете один и тот же сокет s ? Я бы ожидал, что он потерпит неудачу, потому что он уже подключен на каждой итерации после первой.

5. @Tomerikoo Это не сработало только с исключением, это ничего мне не дало, и я играл с этим.