私はねじれたものやscapyに慣れていませんが、これはバニラの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)
私は、サーバーを起点からの送信元アドレスとポートを必要とする質問文の最初の部分に置くことを忘れて一つのこと(そのため、実際にサーバーが偽の送信元アドレスに必要)、これを行うソケットができますか? – Ib33X
いいえ、できません。私はあなたがここで解決しようとしている問題は、いくつかのiptablesのルールによってより良く解決できるかもしれないと思います。どうしてあなたはPythonでそれをしたいのですか? – Benson
ちなみに、パケットヘッダーを捻って偽造できるのであれば、私は非常に驚いています。おそらくあなたの最高の賭けです。私は一見を持って、それがどれほど難しいかを見ます。 – Benson