Перенаправление портов Python / мультиплексирование сервера

Я хотел бы сделать сервер, которые слушают на порте UDP 162 (прерывание SNMP), и затем передает этот трафик нескольким клиентам. Также важный то, что исходный порт и адрес остаются то же (спуфинг адреса).

Я предполагаю, что лучшим инструментом для этого был бы Twisted или Scapy или возможно ванильные сокеты, только я ничего не могу найти в документации для Скрученного о спуфинге/ковке исходного адреса.

Какое-либо решение для этого?

Править: добавленная щедрость, mybe какое-либо решение с iptables?

8
задан 18 revs, 3 users 80% 26 April 2010 в 07:40
поделиться

1 ответ

Мне неудобно использовать twisted или 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)
6
ответ дан 5 December 2019 в 22:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: