【发布时间】:2018-02-17 03:27:43
【问题描述】:
我在 Python 中使用this code 编写了一个套接字数据包嗅探器。
import socket, struct
# Setup socket object
s = socket.socket(socket.AF_INET, socket.SOCK_RAW, socket.IPPROTO_UDP)
s.bind((socket.gethostbyname(socket.gethostname()), 0))
s.setsockopt(socket.IPPROTO_IP, socket.IP_HDRINCL, 1)
s.ioctl(socket.SIO_RCVALL, socket.RCVALL_ON)
Id = 0
while (True):
data = s.recvfrom(65565)
packet = data[0]
address = data[1]
header = struct.unpack("!BBHHHBBHBBBBBBBB", packet[:20])
if (header[6] == 6):
protocol = "TCP"
elif (header[6] == 17):
protocol = "UDP"
print("Number: ", Id, end="\t")
print("Protocol: ", protocol, end="\t")
print("Address: ", address, end="")
print("Header: ", header)
#print("Data: ", data)
print()
Id += 1
- 我知道我可以在数据变量 (data[0]) 的索引 0 处找到接收方的 IP 地址,但是我在数据包的哪个位置可以找到发送方的 IP 地址和端口号?
-
标题元组中的所有整数是什么意思?我知道 header[6] 是 TCP/UDP 协议,但是其余的呢?
标题:(69, 0, 61, 1541, 0, 128, 17, 0, 192, 168, 56, 1, 255, 255, 255, 255)
【问题讨论】:
标签: python python-3.x sockets