Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/276.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#TCP协议。将IP转换为URL_C#_Networking_Tcp_Ip - Fatal编程技术网

C#TCP协议。将IP转换为URL

C#TCP协议。将IP转换为URL,c#,networking,tcp,ip,C#,Networking,Tcp,Ip,如何将ip转换为url?我想创建一个嗅探器,用户可以在一天结束时查看站点列表以及他在每个站点上花费的总时间 static void Sniff(IPAddress ip) { Socket sck = new Socket(AddressFamily.InterNetwork, SocketType.Raw, ProtocolType.IP); //sck.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.Bro

如何将ip转换为url?我想创建一个嗅探器,用户可以在一天结束时查看站点列表以及他在每个站点上花费的总时间

static void Sniff(IPAddress ip)
{
    Socket sck = new Socket(AddressFamily.InterNetwork, SocketType.Raw, ProtocolType.IP);
    //sck.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.Broadcast, 1);
    sck.Bind(new IPEndPoint(ip, 0));
    sck.SetSocketOption(SocketOptionLevel.IP, SocketOptionName.HeaderIncluded, true);
    sck.IOControl(IOControlCode.ReceiveAll, new byte[4] { 1, 0, 0, 0 }, null);
    byte[] buffer = new byte[24];
    Action<IAsyncResult> OnReceive = null;
    OnReceive = (ar) =>
    {
        Console.WriteLine(
            "{0}\t{1}:{2}\t===>\t{3}:{4}"
            , buffer.Skip(9).First().ToProtocolString()
            , new IPAddress(BitConverter.ToUInt32(buffer, 12)).ToString()
            , ((ushort)IPAddress.NetworkToHostOrder(BitConverter.ToInt16(buffer, 20))).ToString()
            , new IPAddress(BitConverter.ToUInt32(buffer, 16)).ToString()
            , ((ushort)IPAddress.NetworkToHostOrder(BitConverter.ToInt16(buffer, 22))).ToString());
        buffer = new byte[24];
        sck.BeginReceive(buffer, 0, 24, SocketFlags.None,
            new AsyncCallback(OnReceive), null);
    };

    sck.BeginReceive(buffer, 0, buffer.Length, SocketFlags.None,
            new AsyncCallback(OnReceive), null);
}

public static string ToProtocolString(this byte b)
{
    switch (b)
    {
        case 1: return "ICMP";
        case 6: return "TCP";
        case 17: return "UDP";
        default: return "#" + b.ToString();
    }
}
静态无效嗅探(ip地址ip)
{
Socket sck=新套接字(AddressFamily.InterNetwork,SocketType.Raw,ProtocolType.IP);
//sck.SetSocketOption(SocketOptionLevel.Socket,SocketOptionName.Broadcast,1);
sck.Bind(新的IPEndPoint(ip,0));
sck.SetSocketOption(SocketOptionLevel.IP,SocketOptionName.HeaderIncluded,true);
IOControl(IOControlCode.ReceiveAll,新字节[4]{1,0,0,0},null);
字节[]缓冲区=新字节[24];
操作OnReceive=null;
OnReceive=(ar)=>
{
控制台写入线(
“{0}\t{1}:{2}\t===>\t{3}:{4}”
,buffer.Skip(9).First().ToProtocolString()
,新的IPAddress(BitConverter.ToUInt32(缓冲区,12)).ToString()
,((ushort)IPAddress.NetworkToHostOrder(BitConverter.ToInt16(buffer,20)).ToString()
,新的IPAddress(BitConverter.ToUInt32(缓冲区,16)).ToString()
,((ushort)IPAddress.NetworkToHostOrder(BitConverter.ToInt16(buffer,22)).ToString());
缓冲区=新字节[24];
sck.BeginReceive(缓冲区、0、24、SocketFlags.None、,
新的异步回调(OnReceive),null);
};
sck.BeginReceive(buffer,0,buffer.Length,SocketFlags.None,
新的异步回调(OnReceive),null);
}
公共静态字符串ToProtocolString(此字节b)
{
开关(b)
{
案例1:返回“ICMP”;
案例6:返回“TCP”;
案例17:返回“UDP”;
默认值:返回“#”+b.ToString();
}
}

正如BugFinder在下面提到的您的问题:要知道用户正在访问哪个网站,并不像查找IP地址那么简单。一个IP地址可以承载多个网站,并且不知道计算机用户正在访问哪个网站(除非您使用代理、监视web请求或类似的内容)

如果知道主机名就足够了:可以在C#中使用对象。例如:

static void Main(字符串[]args)
{
字符串ip=“8.8.8.8”;
Console.WriteLine(Dns.GetHostEntry(ip.HostName);//打印主机名
Console.ReadKey();
}

将在控制台中提供以下输出:

google-public-dns-a.google.com


一个IP可以承载数千个网站——并不是那么简单。你最好加入一个代理,只需报告他看到了什么。请详细说明我需要做什么,或者我如何获得url?你不能从IP获得。多个IP可以是同一个网站,而1个IP可以是多个网站(在托管环境中很常见)。。它可能是stackoverlow,也可能是a片你无法知道他们通过IP访问了哪个网站(我不是建议stackoverflow与a片共享,但很简单),所以,我需要使用什么dll或代码来获取url和时间?只需安装一个代理服务器,阻止所有http/https等流量,除非它通过代理-现在您可以监视谁查看了什么以及何时有返回URL的嗅探器示例?而不是URL,如果没有网络上的代理,或者在发出请求并从网络包读取URL的计算机上,就不可能从IP转到URL。这对我来说不是个好消息。我们可以在C#上按天列出所有访问的站点以及这些站点的总时间吗?这些?“这些网站”是什么意思?你有一套你想要的吗?大多数公司都不赞成使用wireshark监控员工,因为你可以阅读个人信息。事实上,在某一点上,如果你要进行这种数据包监控,他们必须在法律上警告人们——然而现在,这通常只是通过使用代理和报告站点来实现的。。毕竟facebook有游戏,很多网站都有游戏。。