現在、私はJavaからPythonを学んでいて、エラーに遭遇しました。私はWindows 10上で最新のpythonバージョンを使用していますが、私はその後のチュートリアルはLinux用であると仮定しています...あなたがまだ私を助けてくれることを願っています。実行に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()
私はエラー、次の受信: "connection.recvfrom(65536)" に沿って
OSError: [WinError 10022] An invalid argument was supplied
これが私のclasscodeです。
とにかくLinuxですぐにVMを取得しようとしていたのですが、それを待たなければならないのでしょうか、それともWindowsにも良い解決策がありますか?
TCPまたはUDPソケットが必要ですか? 'recvfrom'は一般的にUDP用ですが、あなたはTCPを作っています。 – fuzzything44
正直言って、私は知りません...これはスニファチュートリアルのものですが、最も理にかなっていますか?そして、どのような解決方法が最も良いのでしょうか?申し訳ありませんが、私は本当にこれに新しいです。 –
私はそれを読んでいますが、UDPは高速で信頼性が低いのに対して、TCPは遅く、より信頼性があります。 UDPはパケットベースであるのに対して、TCPはファイルのようにアクセスされます。 – fuzzything44