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

时间:2017-04-10 18:55:02

标签: python windows python-3.x

我正在学习python,来自java,偶然发现了一个我无法找到答案的错误。我在Windows 10上使用最新的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)"。

的行中

无论如何我很快会得到一台带有Linux的虚拟机,我应该等待,还是有适合Windows的解决方案呢?

1 个答案:

答案 0 :(得分:4)

套接字在绑定或发送数据之前没有地址。在使用connection.recvfrom(65536)调用connection.bind((YOUR_IP, PORT))之前绑定套接字。