2

このスクリプトをubuntu11.04ボックスで実行しようとしています:http://taoofmac.com/space/projects/ReGrowl

Growlパケットを中継するように設計されたUDPポート9887にバインドされた小さなスクリプト。

ローカルマシンからスクリプト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マシンがパケットを受信して​​いることを確認しました。

PythonがUDPポートにバインドできるようにするには、ubuntuに何かする必要がありますか?誰もがここで何が起こっているのか知っていますか?

前もって感謝します!


アップデート:

スクリプトの出力は次のようになります。

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 に答える