LINUX.ORG.RU

icmpv6 raw sockets в pyhon

 , ,


1

2

Как пользоваться сабжем? Как я понимаю, чтобы послать валидный пакет, надо считать его контрольную сумму. А она считается вместе с заголовками пакета ip, который недоступен.

python-pcs решает эту проблему через libpcap формируя пакеты на уровне ethernet, но это извращение.

В исходниках линуксного ping6.c они включают опцию IPV6_CHECKSUM и сетевой стек всё считает сам, что несомненно логично. Но как её включить в python’e?

★★★★★

Ответ на: комментарий от xpahos

Да, мне хватает линукса. Один из концов может правда быть под WSL. Мне важно, чтобы без libpcap. Но libpcap - это и так костыль. О чём-то же создатели ipv6 думали скрывая ip пакет от icmp.

alt-x ★★★★★ ()
Ответ на: комментарий от xpahos

Скрывая icmp от ip? Ты о чем?

Чтобы посчитать контрольную сумму пакета icmpv6 нужны заголовки пакета ip. Что уже само-по себе является нарушением инкапсуляции.

Вoт у меня есть RAW-сокет icmpv6. Как я могу его использовать кроме как для посылки нулевого пакета?

Ты читал документацию на IPV6_HDRINCL?

Т.е. без неё сокетом польозваться вообще нельзя?

alt-x ★★★★★ ()
Ответ на: комментарий от ei-grad

билдить пакет начиная с ethernet фрейма

Спасибо. Я как-то надеялся, что можно не опускаться на уровень ethernet. Но на крайняк подойдёт.

с icmp надо смотреть нет ли возможности без raw-сокетов сделать

А как ещё можно послать произвольные байты?

alt-x ★★★★★ ()
Ответ на: комментарий от alt-x

В исходниках линуксного ping6.c они включают опцию IPV6_CHECKSUM и сетевой стек всё считает сам, что несомненно логично. Но как её включить в python’e?

На самом деле ответ на изначальный вопрос вроде простой - посмотреть код опции в заголовочных файлах и включить :).

ei-grad ★★★★★ ()