2

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

完整的脚本和依赖类可用以及上面的链接。

4

1 回答 1

3

您的代码将服务器绑定到本地主机,即它只侦听本地连接。代替

UDPServer.__init__(self,('localhost', GROWL_UDP_PORT), _RequestHandler)

UDPServer.__init__(self,('', GROWL_UDP_PORT), _RequestHandler)

接受来自任何地方的连接。

于 2011-09-28T12:48:06.323 回答