我正在尝试在ubuntu 11.04框上运行此脚本:http://taoofmac.com/space/projects/ReGrowl
它是一个绑定到UDP端口9887的小脚本,用于传输Growl数据包。
我可以从本地计算机发送脚本Growl数据包,它完全按预期工作。
但是,当尝试从我的网络上的另一台机器发送数据包时,它们似乎被删除或者没有进入脚本。
我已经配置了ubuntu以允许端口和netstat的输出如下所示:
root@UbuntuVM:~# netstat -a | grep "udp"
udp 0 0 localhost:9887 *:*
udp 768 0 *:mdns *:*
udp 0 0 *:mdns *:*
udp 0 0 *:45030 *:*
udp6 0 0 [::]:44730 [::]:*
udp6 0 0 [::]:mdns [::]:*
我的脚本是列表中的第一个条目。
我使用过wireshark并确认ubuntu机器正在接收数据包。
我是否需要对ubuntu执行任何操作以允许python绑定到UDP端口?有谁知道这里发生了什么?
提前致谢!
更新:
脚本的输出应如下所示:
127.0.0.1 - - [28/Sep/2011 12:30:27] REGISTER Network Responder 56 ['192.168.0.24', '192.168.0.140', '192.168.0.11', '192.168.0.25', '192.168.0.18', '192.168.0.28', '192.168.0.10', '192.168.0.30']
127.0.0.1 - - [28/Sep/2011 12:30:27] NOTIFY ('Network Status', 'Connection Status', 'Test', 'Network Responder') 80 ['192.168.0.24', '192.168.0.140', '192.168.0.11', '192.168.0.25', '192.168.0.18', '192.168.0.28', '192.168.0.10', '192.168.0.30']
第一个IP是数据包的来源,最后的IP数组是要中继的数据包的目的地。因为你可以从本地机器发出这个数据包,如果我从另一台机器发送数据包,它的IP应该首先出现。
以下是实现UDP服务器的脚本部分:
class GrowlRelay(UDPServer):
"""Growl Notification Relay"""
allow_reuse_address = True
def __init__(self, inpassword = None, outpassword = None):
"""Initializes the relay and launches the resolver thread"""
self.inpassword = inpassword
self.outpassword = outpassword
self.resolver = RendezvousWatcher()
self.resolver.start()
UDPServer.__init__(self,('localhost', GROWL_UDP_PORT), _RequestHandler)
def server_close(self):
self.resolver.shutdown()
可以使用完整的脚本和依赖类以及上面的链接。
答案 0 :(得分:3)
您的代码将服务器绑定到localhost,即它只侦听本地连接。取代
UDPServer.__init__(self,('localhost', GROWL_UDP_PORT), _RequestHandler)
与
UDPServer.__init__(self,('', GROWL_UDP_PORT), _RequestHandler)
接受来自任何地方的连接。