我想编写一个UDP Port Knocker。我有5个可能的UDP端口2222,3333,4444,5555,6666我应该在某个IP地址上敲这个端口,如果敲门序列是正确的(例如3333,4444,2222)我可以通过TCP与服务器通信它会给我一个答案。否则没有答案也没有联系。
为什么我的代码不起作用? ' x'在代码标记放置通常私有信息的地方 - 没有语法错误。
import socket
import time
UDP_IP = "xxxxx"
TCP_IP = 'xxxxx'
TCP_PORT = 1111
request = "xxx"
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
d = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
def my_range(start, end, step):
while start <= end:
yield start
start += step
for x in my_range(2222, 6666, 1111):
for y in my_range(2222, 6666, 1111):
for z in my_range(2222, 6666, 1111):
print "Port knock: ",x,y,z
s.sendto(request,(UDP_IP, x))
s.sendto(request,(UDP_IP, y))
s.sendto(request,(UDP_IP, z))
print "Waiting..."
time.sleep(1)
try:
d.connect((TCP_IP, TCP_PORT))
print "SUCCESS:",x,y,z
time.sleep(1)
data = d.recv(1024)
print "Servers says: " + data
except socket.error:
print "False combination of ports"
continue
s.close()
d.close()
答案 0 :(得分:0)
UDP是无状态协议。 udp-packages的顺序无法保证。例如。 x,y,z可以作为y,x,z或任何其他组合到达服务器。