43 lines
1.4 KiB
Python
43 lines
1.4 KiB
Python
import os
|
|
import sys
|
|
import subprocess
|
|
import atexit
|
|
from threading import Timer
|
|
import string
|
|
import random
|
|
import signal
|
|
import socket
|
|
import codecs
|
|
import datetime
|
|
import time
|
|
|
|
if __name__ == '__main__':
|
|
local_ip = "127.0.0.1"
|
|
local_port = 12345 #add some other port here.
|
|
udp_external_ip = "some IP here"
|
|
buffer_size = 4096 #potentially not large enough?
|
|
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
|
|
sock_external = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
|
|
sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
|
|
sock.bind(("127.0.0.1", local_port))
|
|
print('reached deadlock')
|
|
try:
|
|
while True:
|
|
data, addr = sock.recvfrom(buffer_size)
|
|
data = codecs.decode(data, "utf-8", "ignore")
|
|
ip = addr[0]
|
|
port = addr[1]
|
|
#print('port: ', port, " ip: ", ip)
|
|
#print(data)
|
|
# update 17th february 2024: updating the kernel made the sourcemod UDP socket come from 127.0.0.0 instead of 127.0.0.1
|
|
if not data or not ip.startswith('127.0.0') or not local_ip.startswith('127.0.0'):
|
|
continue
|
|
sock_external.sendto(data.encode(), (udp_external_ip, local_port))
|
|
except KeyboardInterrupt:
|
|
pass
|
|
finally:
|
|
sock.close()
|
|
sock_external.close()
|
|
#UDP redirecter welp
|
|
#screen -d -m -S udp_redirecter1 python3 udp_redirecter.py
|