gpt4 book ai didi

python - 套接字无法建立连接

转载 作者:太空宇宙 更新时间:2023-11-03 15:50:24 25 4
gpt4 key购买 nike

我正在尝试用 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()

最佳答案

并非所有端口都有监听服务,当它们监听时,您需要遵循该服务的正常协议(protocol)。我假设您有某种响应“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”命令,因此它要么会挂起,要么更有可能引发连接重置错误。

关于python - 套接字无法建立连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41365830/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com