C#中的TCP Traceroute

时间:2009-08-21 19:13:06

标签: c# tcp traceroute

如何在C#中执行TCP traceroute?它甚至可能吗?

3 个答案:

答案 0 :(得分:3)

如果你想在C#中进行traceroute,那么你需要制作数据包并不是真的。 traceroute由许多ping从1到n的TTL组成,这可以使用.Net框架的Ping类进行存档。

以下是我的一些旧代码,它不是很漂亮,但它应该有效:

    /// <summary>
    /// Performs a pathping
    /// </summary>
    /// <param name="ipaTarget">The target</param>
    /// <param name="iHopcount">The maximum hopcount</param>
    /// <param name="iTimeout">The timeout for each ping</param>
    /// <returns>An array of PingReplys for the whole path</returns>
    public PingReply[] PerformPathping(IPAddress ipaTarget, int iHopcount, int iTimeout)
    {
        System.Collections.ArrayList arlPingReply = new System.Collections.ArrayList();
        Ping myPing = new Ping();
        PingReply prResult;
        for (int iC1 = 1; iC1 < iHopcount; iC1++)
        {
            prResult = myPing.Send(ipaTarget, iTimeout, new byte[10], new PingOptions(iC1, false));
            if (prResult.Status == IPStatus.Success)
            {
                iC1 = iHopcount;
            }
            arlPingReply.Add(prResult);
        }
        PingReply[] prReturnValue = new PingReply[arlPingReply.Count];
        for (int iC1 = 0; iC1 < arlPingReply.Count; iC1++)
        {
            prReturnValue[iC1] = (PingReply)arlPingReply[iC1];
        }
        return prReturnValue;
    }

答案 1 :(得分:2)

您将需要原始以太网帧来手动生成TCP数据包,因为Windows不允许您通过原始套接字发送TCP数据包。

了解nmap如何获取原始以太网帧。重复一遍。

答案 2 :(得分:1)

来自MSFT:http://msdn.microsoft.com/en-us/library/ms740548(VS.85).aspx

在Windows 7,Windows Server 2008 R2,Windows Vista和Windows XP Service Pack 2(SP2)上,通过原始套接字发送流量的功能受到多种限制:

  • 无法通过原始数据发送TCP数据 套接字。
  • 包含无效源的UDP数据报 地址不能通过原始发送 插座。 IP源地址 任何传出的UDP数据报都必须存在 在网络接口或 数据报被删除。这种变化是 限制的能力 恶意代码创建分布式 拒绝服务攻击和限制 发送欺骗数据包的能力 (具有伪造源的TCP / IP数据包 IP地址)。
  • 使用a调用bind函数 不允许使用原始套接字。

以上限制不适用于Windows Server 2008,Windows Server 2003或Windows XP SP2之前的操作系统版本。