我目前正在学习python,来自java,并偶然发现错误,我找不到答案。我正在使用Windows 10上的最新Python版本,但我认为我所遵循的教程是针对Linux的......希望您仍然可以帮助我。这是我的classcode:OSError:[WinError 10022]提供了一个无效的参数 - Windows 10 Python
def main():
connection = socket.socket(socket.AF_INET, socket.SOCK_RAW,
socket.IPPROTO_IP)
#mainloop
raw_data, addr = connection.recvfrom(65536)
dest_mac, src_mac, eth_proto, data = ethernet_frame(raw_data)
print('\nEthernet Frame:')
print('Destination: {}, Source: {}, Protocol: {}'.format(dest_mac,
src_mac, eth_proto))
#unpack ethernet frame
def ethernet_frame(data):
dest_mac, src_mac, proto = struct.unpack('! 6s 6s H', data[:14])
return get_mac_addr(dest_mac), get_mac_addr(src_mac),
socket.htons(proto), data[14:]
#format MAC adress
def get_mac_addr(bytes_addr):
bytes_str = map('{:02x}'.format, bytes_addr)
return ':'.join(bytes_str).upper()
main()
在执行时,我收到以下错误:
OSError: [WinError 10022] An invalid argument was supplied
与 “connection.recvfrom(65536)” 行
。
无论如何,我很快就会用Linux获得虚拟机,我应该等一下,还是有Windows的好解决方案?
你想要一个TCP或UDP套接字吗? 'recvfrom'通常用于UDP,但你正在制作一个TCP。 – fuzzything44
说实话,我不知道......这是来自一个嗅探器教程,最有意义的是什么?哪种解决方案最适合?对不起,我真的很新鲜。 –
我会读它,但TCP更慢,更可靠,而UDP更快,更不可靠。 TCP也是更像文件访问,而UDP是基于数据包的。 – fuzzything44