套接字无法建立连接

2024-09-30 01:30:08 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图用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()

Tags: 端口程序脚本sendhostport错误socket
1条回答
网友
1楼 · 发布于 2024-09-30 01:30:08

并不是所有的端口都有一个监听它们的服务,当它们监听时,您需要遵循该服务正常的任何协议。我假设您有某种服务可以响应“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.

您的连接调用正在返回一个错误代码,您需要在尝试发送请求之前检查它。因此,至少:

^{pr2}$

但是,由于监听端口的大多数服务器不响应“getBanner”命令,它要么挂起,要么更可能引发连接重置错误。在

相关问题 更多 >

    热门问题