TTL применяется на уровне IP. UDP не имеет TTL. К тому времени, когда полезная нагрузка пакета передается в UDPClient (или даже в сокет UDP), информация TTL исчезает и, к сожалению, не сохраняется в сокете.
Ни сокет UDP, ни TCP не видят этого. Вам потребуется использовать сокет RAW, в котором весь заголовок IP включен в socket.Read (), а затем обработать пакет и извлечь TTL.
Чтение TTL пакетов TCP на уровне сокетов с помощью RAW Сокеты были бы невозможной (чрезвычайно сложной) задачей, так как вам нужно было бы написать свой собственный стек TCP. Если вы хотите «отслеживать» TCP TTL, который может различаться для частей сообщения, вам лучше использовать WFP или PCAP .
Вот хорошая ссылка о том, как сделать RAW Socket UDP в c#