gpt4 book ai didi

Python 套接字服务器 : Reject connection from address

转载 作者:太空宇宙 更新时间:2023-11-04 08:12:52 24 4
gpt4 key购买 nike

我有一个 python 套接字服务器,它监听一个端口,并使用以下方法接受所有传入连接:

(conn, address) = socket.accept()

但是,我希望只接受来自特定 IP 地址的连接。

目前,如果地址未注册,我将关闭连接以完成此操作。

但是有没有更好的方法来做到这一点,直接拒绝来自未注册地址的连接,而不是接受连接然后关闭它们?

最佳答案

无法从某些 IP 地址向客户端指示连接被拒绝,并从其他 IP 地址建立到客户端的连接。这不是 Python 限制,而是较低级别的 BSD 套接字层限制。你甚至不能从 C 中做到这一点。

您在 Python 中通常可以做的最接近的行为是在连接被接受后快速关闭连接:

sock, addr = server_socket.accept()
if addr[0] != '12.34.56.78':
sock.close()
return
...

然后客户端会看到连接被接受,不久之后客户端在读取时会看到 EOF,并且无法写入。

但是可以在绑定(bind)时通过接口(interface)(即网卡)进行限制,方法是使用以下方法之一:

server_socket.bind(('', 65432))  # Bind on any interface.
server_socket.bind(('127.0.0.1', 65432)) # Bind on loopback (localhost clients only).
server_socket.bind(('34.56.78.91', 65432))

所以在 127.0.0.1 版本中,telnet 127.0.0.1 65432(作为客户端)可以工作,但是 telnet myhostname 65432 可以yield Connection refused(server_socket.accept() 调用不会获得此连接)。

关于Python 套接字服务器 : Reject connection from address,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19214552/

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