问题遇到的现象和发生背景
这是一个计网的实验。需要捕获本机的IP包。
遇到的现象和发生背景,请写出第一个错误信息
但是一直在报错,就是在补货的时候会说我的端口被占用。
用代码块功能插入代码,请勿粘贴截图。 不用代码块回答率下降 50%
import socket
print(socket.IPPROTO_TCP)
def catchIPData():
# 获取本机IP作为公共网络接口
HOST = socket.gethostbyname(socket.gethostname())
# 创建一个原始套接字
s = socket.socket(socket.AF_INET, socket.SOCK_RAW, socket.IPPROTO_TCP)
# 将该套接字与公共网络接口绑定
s.bind((HOST,0))
# 设定该套接字包含IP数据报首部
s.setsockopt(socket.IPPROTO_IP, socket.IP_HDRINCL, 1)
# 设定该套接字接收所有数据包
s.ioctl(socket.SIO_RCVALL, socket.RCVALL_ON)
# 接收一个数据包并返回
packet = s.recvfrom(4096)
return packet
def decodeIpHeader(packet):
# 创建一个空字典
IPDatagram = {}
# 根据RFC791协议对数据包进行解析
IPDatagram['version'] = packet[0] >> 4
IPDatagram['headLength'] = packet[0] & 0x0f
IPDatagram['serviceType'] = packet[1]
IPDatagram['totalLength'] = (packet[2] << 8) + packet[3]
IPDatagram['identification'] = (packet[4] << 8) + packet[5]
IPDatagram['flag'] = packet[6] >> 5
IPDatagram['moreFragment'] = IPDatagram['flag'] & 1
IPDatagram['dontFragment'] = (IPDatagram['flag'] >> 1) & 1
IPDatagram['fragmentOffset'] = ((packet[6] & 0x1f) << 8) + packet[7]
IPDatagram['TTL'] = packet[8]
IPDatagram['protocol'] = packet[9]
IPDatagram['headerCheckSum'] = (packet[10] << 8) + packet[11]
# 源IP地址和目的IP地址都按照IP地址的格式用字符串存储
IPDatagram['sourceAddress'] = "%d.%d.%d.%d" % (packet[12], packet[13], packet[14], packet[15])
IPDatagram['destinationAddress'] = "%d.%d.%d.%d" % (packet[16], packet[17], packet[18], packet[19])
# 根据数据包中头部长度确定是否有选项,如果有则添加至option列表中
IPDatagram['options'] = []
if IPDatagram['headLength'] > 5:
step = 5
while step < IPDatagram['headLength']:
IPDatagram['options'].append(packet[step * 4])
IPDatagram['options'].append(packet[step * 4 + 1])
IPDatagram['options'].append(packet[step * 4 + 2])
IPDatagram['options'].append(packet[step * 4 + 3])
step += 1
# 根据数据包中的总长度将数据部分添加至data列表中
IPDatagram['data'] = []
step = IPDatagram['headLength'] * 4
while step < IPDatagram['totalLength']:
IPDatagram['data'].append(packet[step])
step += 1
# 返回储存有数据包数据的字典
return IPDatagram
mm=catchIPData()
print(decodeIpHeader(mm))
运行结果及详细报错内容
D:\pycharm\test\Scripts\python.exe "C:\Users\helen yin\PycharmProjects\pythonProject\main.py"
6
Traceback (most recent call last):
File "C:\Users\helen yin\PycharmProjects\pythonProject\main.py", line 54, in
mm=catchIPData()
File "C:\Users\helen yin\PycharmProjects\pythonProject\main.py", line 7, in catchIPData
s = socket.socket(socket.AF_INET, socket.SOCK_RAW, socket.IPPROTO_TCP)
File "C:\Users\helen yin\AppData\Local\Programs\Python\Python38\lib\socket.py", line 231, in init
_socket.socket.init(self, family, type, proto, fileno)
OSError: [WinError 10013] 以一种访问权限不允许的方式做了一个访问套接字的尝试。
进程已结束,退出代码1
我的解答思路和尝试过的方法,不写自己思路的,回答率下降 60%
我尝试去查询了这个错误发生的原因,但是当我尝试杀死进程的时候我发现首先我不知道我现在正在运行的是哪个进程,其次
我查询了某个进程准备杀死他的时候
他杀不死
我想要达到的结果,如果你需要快速回答,请尝试 “付费悬赏”
希望可以得到解答