pythonでICMPv6のIPヘッダを参照したい

前提、実現したいこと

pythonを用いてICMPv6メッセージを作成し、受け取るようなシステムを作っています。
ICMPv6ヘッダに自作のオプションを追加しているのでscapy,tcpdumpだとうまく解析できないため、socketライブラリを用いて受け取ったバイナリデータを読み取りたいです。
自作のオプションを含んだパケットの作成、送信は既に実現済みです。

発生している問題

socket.socket(socket.AF_INET, socket.SOCK_RAW, socket.IPPROTO_ICMPV6)
だとICMPv6ヘッダを参照し自作オプションもバイナリデータで読み取れますが、IPv6ヘッダを受信できません。

socket.socket(socket.AF_INET6, socket.SOCK_RAW, socket.IPPROTO_RAW)
だとIPv6ヘッダとICMPv6ヘッダから自作できますが、送信のみに対応しているようで受信できません。

ソースコード1

import socket

s=socket.socket(socket.AF_INET, socket.SOCK_RAW, socket.IPPROTO_ICMPV6)
s.bind(("",0))
packet,addr=s.recvfrom(1024)
print(packet)
#b'\x80\x00... といったようにICMPヘッダ以降のデータのみ出力

ソースコード2

import socket

s=socket.socket(socket.AF_INET, socket.SOCK_RAW, socket.IPPROTO_RAW)
s.bind(("",0))
packet,addr=s.recvfrom(1024)
print(packet)
#なにも出力されない

コメントを投稿

0 コメント