我正在构建语音信使类型应用程序...我的服务器应用程序应该接收多个连接,并且应该选择一个连接...
我的问题是我不知道如何在我选择一个特定的IP并连接到它之前显示所有连接的IP地址。 我在ubuntu上使用python ...
答案 0 :(得分:3)
没有API机制允许您在<{em>> accept(2)
该连接之前读取潜在连接的对等地址。它在套接字级别不存在,所以它也不会在Python中存在。
如果您希望在应用程序中构建方式过多的操作环境知识,可以始终使用libpcap
或winpcap
或类似工具来嗅探线路传入流量,但(a)这需要提升权限,这通常是一个可怕的想法(b)与大多数通信服务器任务实际上无关。
tcp_wrappers
机制的作用是accept(2)
传入连接,在套接字上调用getpeername(2)
,然后close(2)
套接字,如果程序使用tcp_wrappers
不应该与那个远程同伴交谈。 (请参阅/etc/hosts.allow
,/etc/hosts.deny
和/etc/hosts.options
,hosts.allow(5)
联机帮助页。)这对客户来说可能很粗鲁,但系统管理员决定禁止与他们交谈,所以友好不是一个非常重要的优先事项。
那么,在已经close(2)
连接后,只需accept(2)
个连接是否可以接受?如果是这样,您可以使用socket.getpeername()
查找远程对等方的IP,执行您需要的操作,然后如果您不应该首先接受连接,请在套接字上调用socket.close()
。