我正在尝试在 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()
完整的脚本和依赖类可用以及上面的链接。