我试图用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()
并不是所有的端口都有一个监听它们的服务,当它们监听时,您需要遵循该服务正常的任何协议。我假设您有某种服务可以响应“getBanner”,但大多数不会。你要连接到FTP、SSH、DNS、NFS和邮件服务器,这些东西没有“getBanner”命令。但是您也尝试连接到没有任何监听的端口,这会产生错误。在
查看文档:
您的连接调用正在返回一个错误代码,您需要在尝试发送请求之前检查它。因此,至少:
^{pr2}$但是,由于监听端口的大多数服务器不响应“getBanner”命令,它要么挂起,要么更可能引发连接重置错误。在
相关问题 更多 >
编程相关推荐