pc是双网卡的,一个网卡上网,一个网卡连我们的机器,那如何编程获取连机器的那个网卡的ip地址呢。机器的ip地址和mac地址是知道的

解决方案 »

  1.   

    用gethostname、gethostbyname可以获取本机所有IP。
      

  2.   


    我知道是可以获取本机的所有ip,但我现在要编程改其中一个网卡的ip,这个网卡是连着一台喷绘机的,喷绘机的ip和mac地址是已知的,我应该如何知道是哪个网卡连喷绘机。
      

  3.   

    方法很多A、如果你的电脑和喷绘机中间没有路由器,那么就是同一网段的嘛
    枚举本机所有IP,查找与喷绘机IP是同一网段的IP,比较方法就是将IP和子网掩码相与之后再比较,IP&MASK枚举本机IP的API gethostbyname或者GetAdaptersInfoB、如果不再同一子网内,可以查找本机路由表,找到到达喷绘机IP的路由项
    这个方法是通用的,不论什么网络结构,只要你的喷绘机和你的电脑之间网络是通的就可以获取路由表API GetIpForwardTable
      

  4.   

    用GetAdaptersInfo获得本机所有网卡信息,得到一张链表,遍历一下就行了
      

  5.   


    应该是A。。但现在上司又说不用这种方法来获取再改ip。说是用arp建立连接后,再根据获取的ip来改。。不是很懂,也不清楚这两种方法各有什么弊端。先查查资料学习一下。。A还有一个问题是,如果该网卡不是自动获取ip,而是原来就设定了一个与喷绘机不是同一个网段的ip和子网掩码的话,可以怎么办呢。。囧囧..我太菜了
      

  6.   

    我现在用 arp -s建立连接,然后用arp -a 获取当前和本机连接的IP同IP相对应的MAC地址。再根据喷绘机的ip或mac地址得到表中需要的ip项。
      

  7.   

    正解,遍历时判断ip或mac就可
      

  8.   

    tortoise85,你看多描述一下情况,就会有很多人回复你了吧。我看了你上面的话。我的理解是不是这样。
    你有一个程序要发布到用户的机器上,但是每个用户的情况都不一样,但他们都有一个共同点是,机器都有至少两块以上的网卡,同时连续A网和B网,假定B网是和喷绘机连接的网络,你已知喷绘机的IP和MAC地址。现在需要你的程序确定是哪块网卡配置到B网上。如果你现在是我描述的这个情况,你不妨这样做。你在第一次运行程序时,枚举所有的网卡,然后用对话框提示给用户,用户使用这台机器,当然最清楚哪块网卡是做什么用的。让他选择一个,然后你就使用他选择的网卡进行工作。
    如果他选择错了,那你的程序就不能找到喷绘机,你还可以在后面的操作中,再进行提示选择。
    如果你不希望每次启动都要用户选择,你可以在第一次选择后记录下网卡的MAC地址,以后就不再需要用户选择了。(就好像QQ刚安装时,总要是提示你输入QQ号,但输入一次后,以后就不用每次都输入了,只要选择就可以了。这个也是类似)
      

  9.   


    用这个api可以知道是哪个网卡连喷绘机的吗
      

  10.   


    谢谢,正是你描述的情况。我们的喷绘机是要求用户把连喷绘机的网卡的ip地址设定为“192.12.0.188”才允许正常传输数据的。我们已经做了是:用gethostbyname枚举出pc上所有的ip地址,如果没有“192.12.0.188”就会提示用户修改好ip才运行打印。
    现在想做的是,不需要用户自己手动修改,驱动里面把这部分做完。。其实很多客户对电脑的知识可能处于开机关机状态的,所以我们想做到的都帮他们做了
      

  11.   

    我现在是想这样。
    char SrcMAC[] = "00-60-03-6e-21-04";  //喷绘机的网卡地址
    char pIPObj[] = "192.168.0.25";       //喷绘机的ip地址
    sprintf(tmpStr,"arp -s %s  %s",pIPObj,SrcMAC);
    system(tmpStr);
    进行连接。然后用
    sprintf(tmpStr,"arp -a ");
    system(abc);
    就像命令行中输入arp -a命令就可以看到哪个网卡跟喷绘机的连接,并知道ip地址等信息。。这样我可以根据枚举出来信息进行遍历,最后还可以修改等。
    问题是我执行了system(abc);后如何想命令行那样返回到我需要的信息呢
      

  12.   

    既然喷绘机的IP和MAC已知,那就好办了阿1、获得本机所有网卡的MAC和IP,用GetAdapterinfo
    2、可以考虑用winPcap库发送ARP询问帧,询问喷绘机那个IP的MAC地址是多少,分别通过2张网卡发送ARP包,收到回应的网卡就是喷绘机的