Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
OSError:[WinError 10022]提供的参数无效-Windows 10 Python_Python_Windows_Python 3.x - Fatal编程技术网

OSError:[WinError 10022]提供的参数无效-Windows 10 Python

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

我目前正在学习来自java的python,但无意中遇到了一个我找不到答案的错误。我在Windows10上使用的是最新的python版本,不过我认为我所遵循的教程是针对Linux的。。。希望你还能帮我。这是我的课程代码:

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和端口。是否有方法从客户端动态查找端口号?