Мне нужно написать скрипт trceroute, но я не уверен, что мои попытки верны.
Прямо сейчас я делаю это так (пожалуйста, поправьте меня, если я делаю неправильно или неуклюже):
- Получил структуру для ip- и udpheader
- Функция контрольной суммы
- Открытие 2-х сокетов: один для отправки UDP-пакетов в режиме SOCK_RAW (для манипулирования ttl) и один для приема ICMP-ответов от роутеров.
- Использование sendto() для отправки пакета UDP
- Не знаете, как получить и обработать ответ ICMP
Есть ли более удобные способы изменить TTL, чем использование sock_raw, где я должен сам определять все заголовки? Какие параметры следует использовать для socket() при открытии ICMP sock? Как получить ICMP-ответ?