OSError:[WinError 10022]提供的参数无效-Windows 10 Python
我目前正在学习来自java的python,但无意中遇到了一个我找不到答案的错误。我在Windows10上使用的是最新的python版本,不过我认为我所遵循的教程是针对Linux的。。。希望你还能帮我。这是我的课程代码:OSError:[WinError 10022]提供的参数无效-Windows 10 Python,python,windows,python-3.x,Python,Windows,Python 3.x,我目前正在学习来自java的python,但无意中遇到了一个我找不到答案的错误。我在Windows10上使用的是最新的python版本,不过我认为我所遵循的教程是针对Linux的。。。希望你还能帮我。这是我的课程代码: def main(): connection = socket.socket(socket.AF_INET, socket.SOCK_RAW, socket.IPPROTO_IP) #mainloop raw_data, addr = conn
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)”行中
这是windows特有的错误吗?套接字在其绑定或数据发送之前没有地址。在调用
connection.recvfrom(65536)
之前先绑定套接字,使用connection.Bind((您的IP,端口))
您想要TCP还是UDP套接字recvfrom
通常用于UDP,但您正在创建TCP。老实说,我不知道。。。这是一个嗅探器教程,什么最有意义?哪种解决方案最适合哪种情况?对不起,我对这一点很陌生。我会仔细阅读,但TCP速度较慢,可靠性更高,而UDP速度更快,可靠性更低。TCP的访问更像是一个文件,而UDP是基于数据包的。我知道,是的,我有一些关于TCP和UDP的基本知识,但是考虑到我想使用TCP,如何解决当前问题?请注意,此时您不需要执行recvfrom
,因为recv
也可以正常工作,因为您知道IP和端口。是否有方法从客户端动态查找端口号?