このスクリプトを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()
完全なスクリプトと依存クラスが利用可能であり、上記のリンクがあります。