10

UDP ポート 162 (SNMP トラップ) をリッスンし、このトラフィックを複数のクライアントに転送するサーバーを作成したいと考えています。また、送信元ポートとアドレスが同じままであることも重要です (アドレス スプーフィング)。

これに最適なツールはTwistedまたはScapyまたはおそらくバニラ ソケットになると思いますが、Twisted のドキュメントにはソース アドレスのスプーフィング/偽造について何も見つかりません。

これに対する解決策はありますか?

編集:賞金を追加しました。iptablesを使用したソリューションはありますか?

4

3 に答える 3

7

私はツイストまたはスカピーに慣れていませんが、バニラの python ソケットでこれを行うのは非常に簡単です。その追加の利点は、さらに移植性が高くなることです。このコードは私の限られたテストで動作します:

#!/usr/bin/python
from socket import *
bufsize = 1024 # Modify to suit your needs
targetHost = "somehost.yourdomain.com"
listenPort = 1123

def forward(data, port):
    print "Forwarding: '%s' from port %s" % (data, port)
    sock = socket(AF_INET, SOCK_DGRAM)
    sock.bind(("localhost", port)) # Bind to the port data came in on
    sock.sendto(data, (targetHost, listenPort))

def listen(host, port):
    listenSocket = socket(AF_INET, SOCK_DGRAM)
    listenSocket.bind((host, port))
    while True:
        data, addr = listenSocket.recvfrom(bufsize)
        forward(data, addr[1]) # data and port

listen("localhost", listenPort)
于 2009-12-13T22:56:54.243 に答える
0

多重化ではなく、ポートを転送するための異なるが関連するソリューションの一種です(特定の質問には答えませんが、関連するものと一致することを願っています-これは少なくとも私が探していたものです):

http://www.linux-support.com/cms/forward-network-connections-with-python/

于 2012-09-19T07:38:31.460 に答える