即:在局域网中,如何检测某IP是路由器(专用路由器开启了路由功能的计算机)?
请高手指教,能给出一点代码更好。

解决方案 »

  1.   

    DWORD GetAdaptersInfo(
      PIP_ADAPTER_INFO pAdapterInfo,  // buffer to receive data
      PULONG pOutBufLen               // size of data returned
    );
    检测一下网关IP就可以了吧
      

  2.   

    不知道有什么现成的办法我想到的办法就是两个^_^:1. 看这个IP是否和自己的网关IP一样2. 检测它的操作系统
      

  3.   

    我可不是大侠..-_-b检测操作系统可以利用操作系统里的TCP/IP堆栈作为标志,因为不同的操作系统在网络底层协议的各种实现细节上略有不同,可以通过向目标主机发送特殊的包,然后返回的包来确定操作系统^_^比如:1。发送一个SYN包,它包括没有定义的TCP标记的TCP头,那么在Linux系统会包含这个
       没有定义的标记,而别的系统则会在收到SYN+BOGU包之后关闭连接2. 利用寻找初始化序列长度模板与特定操作系统相匹配的方法,这个方法很有效,
       利用它可以给很多系统分类3. 还有就是检查返回包里包含的窗口长度,因为操作系统都有不同的初始化窗口大小4. 其实还有很多方法,我都记不大住了,不好意思-_-b   不过说了这么多,具体是怎么匹配的我都忘了,表鄙视我啊,实在是很难记-_-#     而且我也不大关注CISCO的系统,就当是抛砖引玉吧呵呵^_^
      

  4.   

    不过有很多很多的扫描器都是利用的这种技术的,比如nmap,checkos之类的,楼主可以看一下相关的资料了就是如果自己实现起来有点麻烦呵呵
      

  5.   

    谢谢楼上的。
    不同操作系统返回不同的TTL值,这个有办法检测。
    但检测到操作系统后如何判断它是否开启了路由呢?总不能把所有的WIN2000(XP)或UNIX都当路由器吧。
      

  6.   

    另:这里所指的路由器并非专指cisco,而是包括所有类型的带路由功能的设置,如300元一个的ADSL路由器等。
      

  7.   

    路由器也有路由器的操作系统啊,它肯定也有和别的操作系统不一样的地方的只要用了cisco的操作系统就可以大概判断它是路由器了吧
      

  8.   

    o ,没看到,不好意思-_-b不过真的要试验那个设备是否有路由功能就更麻烦了-_-b
      

  9.   

    其实你也可以看一下置顶的limin写的traceroute的文章,它可以获得一个数据包所经过的路由,所以它经过的第一个路由器就应该是你的网关啊可以用它来和那个IP比较一下也行^_^其实办法有很多的
      

  10.   

    呵呵,可以使用SNMP来获取这个设备是否有特定的接口来判断是否是专用路由器。只是这个方法可能对不支持SNMP的或者低端的路由设备不管用。
      

  11.   

    你只要检测某个ip是不是网关就可以了,用iphelper函数吧
      

  12.   

    发个ICMP包,每次记下路由器的IP,返回来的时候不就知道了么,要不要代码啊,我给你啊,就WINDOWS的哪个TRACE就可以的
      

  13.   

    要检测局域网某台主机是否有路由功能其实很简单:
    先用arp -s命令将你当前的网关的IP绑定于要检测的那台主机的MAC地址,如果绑定后可以上网,则说明目标主机有路由功能
      

  14.   

    仔细折腾了一下,可以利用icmp重定向报文。举这样一个例子,网关为192.168.0.1,本机ip为192.168.0.10,现在我ping 192.168.0.20,那么在我ping的时候会发icmp应答请求包,这个包的mac头中的目标mac为192.168.0.20的网卡mac,因为根据本机ip、目标ip和掩码分析,这个包不需要路由的,所以直接发给192.168.0.20。但是假如我将这个包mac头中的目标mac改为网关192.168.0.1的mac,那么这个icmp包就会发给网关。
    网关会将该包转发给目标主机192.168.0.20,另外网关还会认为我的路由选择不是最好的,并非最短,所以它会发一个icmp重定向报文给我,告诉我应该从什么ip地址走到达目标主机最短。
    结果他告诉我一个ip地址,他希望我取得这个ip地址对应的mac,并向其直接发包。显然,在同一网内,这个网关告诉我的ip地址是192.168.0.20,即我发包的目标ip地址。那么了解了这个机制以后,我们就可以构造一个icmp应答请求包,其中目标ip地址为本网段的某个ip地址,然后给这个包加上mac头,其中目标mac为我们需要探测的是否具有路由功能的主机的mac,然后就等他的icmp重定向报文了,如果他发给我了,那他就是具备路由功能的,反之则不具备路由功能。这种icmp重定向报文的类型值为5,代码值0
      

  15.   

    呵呵,我隐隐约约知道一些,但是具体还是说不清^_^还是limin大侠了解得透彻这个帖子不得不一下了希望大家积极讨论提出自己的见解^_^
      

  16.   

    to PiggyXP(【小猪】●你快乐于是我快乐) 寒丫……
    还不知道这个办法在楼主那里是否可行,我只做了小范围简单测试……
    另外,别叫我大侠……
      

  17.   

    我觉得你说的很有道理, limin大“虾”深入研究过icmp的就是不一样^_^