-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathudp_proxy.py
More file actions
39 lines (32 loc) · 927 Bytes
/
udp_proxy.py
File metadata and controls
39 lines (32 loc) · 927 Bytes
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
#!/usr/bin/python
import sys, socket
def errOut(error):
sys.stderr.write(error + "\n")
sys.exit(1)
if len(sys.argv) != 2 or len(sys.argv[1].split(':')) != 3:
errOut('Usage: udp_proxy.py localPort:remoteHost:remotePort')
localPort, remoteHost, remotePort = sys.argv[1].split(':')
try:
localPort = int(localPort)
except:
errOut('Invalid port number: ' + str(localPort))
try:
remotePort = int(remotePort)
except:
errOut('Invalid port number: ' + str(remotePort))
try:
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.bind(('', localPort))
except:
errOut('Failed to bind on port ' + str(localPort))
knownClient = None
knownServer = (remoteHost, remotePort)
sys.stderr.write('All set.\n')
while True:
data, addr = s.recvfrom(32768)
if knownClient is None:
knownClient = addr
if addr == knownClient:
s.sendto(data, knownServer)
else:
s.sendto(data, knownClient)