[英]How do I get the TTL of INCOMING packets when using C#
注意:我倾向于使用 UDPClient 来解决这个问题,但 Berkley Socket 类也可以使用。
问:我一直在到处搜索如何读取传入数据包的“TTL”,但在任何地方都找不到。 我知道
Socket s = new Socket(ipe.AddressFamily, SocketType.Stream, ProtocolType.Tcp);
s.Ttl;
让我获取或设置传出数据包的 Ttl,但我想读取传入数据包的 ttl 值。 我很难解析传入数据包的数据部分之外的任何内容,但我的目标是执行逻辑并最终记录包含 UDP 和 IP 标头等的整个数据包。 我在这里误解了什么?
TTL 适用于 IP 层。 UDP 没有 TTL。 当数据包有效负载被传递到 UDPClient(甚至 UDP 套接字)时,TTL 信息已经消失,不幸的是没有保留在 Socket 中。
UDP 或 TCP 套接字都看不到这一点。 您需要使用 RAW 套接字,它的整个 IP 标头包含在 socket.Read() 中,然后处理数据包并提取 TTL。
使用 RAW 套接字在套接字层读取 TCP 数据包的 TTL 将是一项不可能(极其困难)的任务,因为您需要编写自己的 TCP 堆栈。 如果您想“监视”TCP TTL,它可能因消息的某些部分而异,那么您最好考虑使用WFP或PCAP 。
这是一个关于如何在 c# 中执行 RAW Socket UDP 的好链接
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.