Python SOCK_RAW似乎在所有端口上侦听

时间:2017-02-20 15:31:12

标签: python networking

请考虑以下代码:

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到目标也会触发代码。

1 个答案:

答案 0 :(得分:1)

原始套接字(有关详细信息,请参阅raw(7))支持发送原始IP数据报。原始ip数据报没有端口。端口是在IP之上分层的更高级协议的构造,如UDP和TCP。

您可以自己检查收到的数据包以解压缩udp / tcp端口。

另一种解决方案可能是利用netfilter框架捕获设置了SYN标志的特定tcp端口上的数据包,然后通过nfqueue扩展名将其发送到您的程序。