[英]Python SOCK_RAW seems to listen on all ports
考虑以下代码:
import socket, sys, time
HOST = '172.16.0.19'
PORT = 1000
#create a raw socket
try:
s = socket.socket(socket.AF_INET,socket.SOCK_RAW, socket.IPPROTO_TCP)
except socket.error , msg:
print 'Socket could not be created. Error Code : ' + str(msg[0]) + ' Message ' + msg[1]
sys.exit()
s.bind((HOST,PORT))
while True:
print "Waiting for SYN..."
rec_packet, addr = s.recvfrom(100)
print "Incoming connection detected!"
print "".join(map("{0:08b}".format, map(ord, list(rec_packet[0:10]))))
print addr[0]
print ""
它是自动SYN攻击检测器的简化版本。 当我使用时:
nmap 172.16.0.19 -sS -p 1001 **NOTE THE DIFFERENT PORT**
我仍然从代码中检测到。 s.bind是否仅在给定端口上侦听?
到目标的SSH也会触发代码。
原始套接字(有关详细信息,请参见raw(7)
)支持发送原始IP数据报。 原始ip数据报没有端口 。 端口是在UDP和TCP等IP之上分层的高层协议的构造。
您可以自己检查接收到的数据包以提取udp / tcp端口。
另一种解决方案可能是利用netfilter框架捕获设置了SYN标志的特定tcp端口上的数据包,然后通过nfqueue扩展将其发送到程序。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.