【问题标题】:How do I get the TTL of INCOMING packets when using C#使用 C# 时如何获取传入数据包的 TTL
【发布时间】:2020-02-03 20:51:53
【问题描述】:

注意:我更喜欢使用 UDPClient 来解决这个问题,但 berkley Socket 类也可以。

问题:我一直在到处搜索如何读取传入数据包的“TTL”,但在任何地方都找不到。我知道

Socket s = new Socket(ipe.AddressFamily, SocketType.Stream, ProtocolType.Tcp);
s.Ttl; 

让我获取或设置 传出 数据包的 Ttl,但我想读取传入数据包的 ttl 值。我很难解析传入数据包的数据部分之外的任何内容,但我的目标是执行逻辑并最终记录包含 UDP 和 IP 标头以及所有内容的整个数据包。我在这里误会了什么?

【问题讨论】:

标签: c# windows tcp udp ip


【解决方案1】:

TTL 适用于 IP 层。 UDP 没有 TTL。当数据包有效负载被传递到 UDPClient(甚至是 UDP 套接字)时,TTL 信息已经消失,不幸的是没有保留在 Socket 中。

UDP 或 TCP 套接字都无法看到这一点。您需要使用一个 RAW Socket,它的整个 IP 标头都包含在 socket.Read() 中,然后处理数据包并提取 TTL。

使用 RAW 套接字在 Socket 层读取 TCP 数据包的 TTL 将是一项不可能(极其困难)的任务,因为您需要编写自己的 TCP 堆栈。如果您想“监控”可能因消息部分而异的 TCP TTL,那么您最好使用 WFPPCAP 来查看。

这里有一个很好的link,关于如何在 c# 中执行 RAW Socket UDP

【讨论】:

    猜你喜欢
    • 2012-03-03
    • 2018-10-11
    • 1970-01-01
    • 2013-12-09
    • 2020-06-28
    • 2015-09-12
    • 2014-03-31
    • 1970-01-01
    • 2018-02-12
    相关资源
    最近更新 更多