TCP Traceroute в C # - PullRequest
       23

TCP Traceroute в C #

3 голосов
/ 21 августа 2009

Как вы можете выполнить трассировку TCP в C #? Это вообще возможно?

Ответы [ 3 ]

3 голосов
/ 19 декабря 2010

Это неправда, что вам нужно работать с пакетами, если вы хотите выполнить трассировку в C #. Трассировка маршрута состоит из множества пингов с TTL от 1 до n, и это может быть заархивировано с помощью класса Ping платформы .Net.

Вот мой старый код, он не очень красивый, но должен работать:

    /// <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;
    }
2 голосов
/ 21 августа 2009

Вам понадобятся необработанные кадры Ethernet для генерации TCP-пакетов вручную, поскольку Windows не позволяет отправлять TCP-пакеты через необработанные сокеты.

Посмотрите, как nmap получает необработанные кадры Ethernet. Повторите это.

1 голос
/ 22 августа 2009

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

В Windows 7, Windows Server 2008 R2, Windows Vista и Windows XP с пакетом обновления 2 (SP2) возможность отправки трафика через необработанные сокеты была ограничена несколькими способами:

  • Данные TCP не могут быть отправлены через raw розетки.
  • UDP датаграммы с неверным источником адрес не может быть отправлен по сырому Розетки. IP-адрес источника для любая исходящая UDP датаграмма должна существовать на сетевом интерфейсе или датаграмма сбрасывается. Это изменение было сделано, чтобы ограничить способность вредоносный код для создания распределенных атаки и ограничения на отказ в обслуживании возможность отправки поддельных пакетов (Пакеты TCP / IP с поддельным источником IP-адрес).
  • Вызов функции связывания с необработанный сокет не допускается.

Указанные выше ограничения не распространяются на Windows Server 2008, Windows Server 2003 или версии операционной системы, предшествующие Windows XP с пакетом обновления 2 (SP2).

...