如何在C#中执行TCP traceroute?它甚至可能吗?
答案 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)上,通过原始套接字发送流量的功能受到多种限制:
以上限制不适用于Windows Server 2008,Windows Server 2003或Windows XP SP2之前的操作系统版本。