捕获arp吗?不知道怎么弄?请高人指教

解决方案 »

  1.   

    可以通过枚举网络资源得到,使用WNetOpenEnum和WNetEnumResource。
      

  2.   

    笨办法,弄个后台线程Ping.^^&&
      

  3.   

    可以通过定量枚举网络资源得到,使用WNetOpenEnum和WNetEnumResource。
    但是这个办法太笨我也想知道有没有好的办法
    关注
      

  4.   

    在定时器中ping,或枚举
    其他方法???
      

  5.   

    定时器中ping,或枚举
    这两个办法都比较笨,有没有其他好的办法?
    机器开启的时候,应该会有一些网络动作,都有那些动作?怎么捕获这些网络包?
      

  6.   

    自己写个程序不端接收ARP包,因为别的机器一启动一定会发送给局域网一个广播通知的(ARP包)
      

  7.   

    我有一个办法,理论上绝对可行!你发一个 UDP 广播包, 目的IP 为局域网广播地址。
    由于任何机器(开着机的)上都没有程序来接收你这个广播的UDP包,那么必然由
    ICMP 协议来回应你的UDP广播包。
    也就是说所有开着机的机器都会回应给你一个 ICMP 包, 其类型为 目的端口不可到达(因为在应用层没有程序来接收你的UDP包)。你自己把这个包打开,然后观查源地址就行了。
    这很容易, 网上到处都有 PING 程序,你可以看看。
      

  8.   

    那样的话,要网络监听也,winpcap比较好
      

  9.   

    yes,winpcap can do it.the easy way is send arp package.
      

  10.   

    机器一开机是不是广播UDP包,即向*.*.*.255发送UDP包?
      

  11.   

    winpcap 就是专门捕获的!!当然还有其他用途〉
      

  12.   

    http://bbs2.acnow.net/html/article/34/16502.htm
      

  13.   

    假如一个局域网有多个网段,如何PING?
      

  14.   

    这个问题不存在绝对解决方案,要看局域网的结构和网络设备配置。ARP方式如果不是监听主机和被监视主机在同一冲突域,基本无效。
    如果是多网段,路由器/交换机全配成ICMP不可转发,Ping方式无效。
    如果是多网段,路由器/交换机全配成IP广播不可转发,UDP方式无效。So....要看环境了,环境看准了再谈实现办法。
      

  15.   

    单网段,判断开机时的UDP广播,是不是一个可以解决的方法
      

  16.   

    Re:单网段,判断开机时的UDP广播,是不是一个可以解决的方法UDP广播方式是用来扫描已经开机的主机的,不是用来判断某机器正在开机的,既然是单网段,推荐arp方式。
      

  17.   

    我以前做过这个东西的
    方法就是:监听所有ARP包,
    检查:
    1 :发送地址和接收地址是否相同
    2 :目的硬件地址是否全为0
    不清楚还有没有其他的条件
    满足条件1,2的被视为机器启动
    或者改动IP时发送的ARP包
      

  18.   

    geland(ding) 的方法可以试一下
      

  19.   

    还有一个问题,原始socket可以监视arp包吗
      

  20.   

    原始socket可以监视arp包吗?
    不可以的吧
      

  21.   

    将网络连接中的“禁用TCP/IP上的NetBios”,开机时,用Sniffer捕获不到任何包啊
      

  22.   

    我前段时间弄了一个,连接同事机器的一个程序 DWORD retval;
    NETRESOURCE netsrc;
    memset(&netsrc,0,sizeof(NETRESOURCE));
    //\\fox\share
    netsrc.dwScope = RESOURCE_CONNECTED;
    netsrc.dwType = RESOURCETYPE_DISK;
    netsrc.dwDisplayType = RESOURCEDISPLAYTYPE_GENERIC;
    netsrc.dwUsage = RESOURCEUSAGE_CONNECTABLE; netsrc.lpRemoteName = "\\fox\\share";
    //netsrc.lpLocalName = "h:\\"; retval = WNetAddConnection2(&netsrc,"guest","guest",CONNECT_UPDATE_PROFILE);
    if(retval!= NO_ERROR)
    //connect ok其实就是通过程序连接机器//fox
    自己在本机上运行本程序,当连接成功,意味着开机 ???
    有局限性,前提必须该机器有一个共享,而且可以用guest用户登陆(本程序用户密码都为guest)