2016-02-29 2 views
0

Можно ли написать программу на C, которая может установить MSL для UDP-пакета и получить возвращаемую информацию о смерти, чтобы я мог получить информацию, где был пакет? Я прочитал, что вы можете установить его только в ОС, но как это возможно, что такие программы, как traceroute, используют именно этот заголовок из UDP?Можно ли написать программу на C, которая может установить MSL для UDP-пакета?

+0

Да, но вы имели бы дело с сырыми сокетами и должны были бы самостоятельно создавать все заголовки IP и UDP. – EJP

ответ

0

Вы говорите о времени жизни (TTL)? Вы должны иметь возможность использовать опцию сокета IP_TTL (см. Ip (7)), чтобы установить время жизни пакетов, отправленных на этот сокет. Если пакет проходит через достаточное количество переходов для TTL, чтобы стать нулевым, узел, который отбрасывает пакет, должен отправить сообщение ICMP Time Exceeded обратно на исходный узел. Чтобы получить сообщение об ошибке, я думаю, вам, возможно, придется создать ICMP-сокет. Это то, что делает traceroute, поэтому вы можете взглянуть на исходный код.

+0

Думаю, я говорил об этом. – missjohanna