ping局域网内雷同计算机名电脑

ping局域网内相同计算机名电脑
本帖最后由 leaver13 于 2014-04-05 08:45:26 编辑
我和老板在一个局域网内,局域网内IP地址为自动获取,IP地址不定时变动。
我想通过ping命令知道他的电脑是否开启,以前的电脑名字是boss-pc,我ping boss-pc就可以了。
但他现在更换了电脑,计算机名为lenovo-pc,局域网内好几台lenovo-pc,我该怎么判断呢?

因为我现在知道他电脑的mac地址了,所以想通过mac地址确定。
思路是ping 局域网内所有255个ip地址一遍,和局域网内已经开启的ip通讯,arp缓存里就有所有mac地址了,然后arp -a。
这时两种情况,arp -a 找到他的mac地址及对应ip,那么他的电脑开启了;
arp -a找不到他的mac地址,那么他的电脑没开启。

但是问题是ping 255个ip太费时间了,试了一下需要五六分钟,太慢了。
请问有没有更简单高效的方法呢?


附上我之前写的bat,分享给其他同事用的
Quote:
[@echo off   
echo 电脑连接中……
c:/windows/system32/ping boss-pc
c:/windows/system32/ping -n 2 boss-pc > d:\result
findstr "<1ms" "d:\result"&&goto 1||goto 2
:1
cls&echo "电脑连接成功,老板在办公室o(>_<)o "
del d:\result
pause&exit
:2
cls&echo "电脑连接失败,老板不在办公室\(~o~)/"
del d:\result
pause&exit/quote]
------解决方案--------------------
引用:
Quote: 引用:

直接在路由器上固定你老板的IP就好了

路由器不归我控制啊


一、暴力破解路由器密码。

二、远程进老板电脑,修改电脑标识名。

三、提交申请,以维护网络 IP 冲突为理由,让网管为每台电脑设固定 IP。

------解决方案--------------------
ping 255个一点也不费时间:
#include <windows.h>
#include <stdio.h>
#include <string.h>
char YN(int k) {
    FILE *f;
    char fn[40];
    char ln[80];
    char yn;
    int n;

    yn='N';
    sprintf(fn,"d:\\ping%d.txt",k);
    f=fopen(fn,"r");
    if (NULL!=f) {
        n=0;
        while (1) {
            if (NULL==fgets(ln,80,f)) break;//
            if (strstr(ln,"ms ")) {
                yn='Y';
                break;//
            }
            n++;
            if (n>=4) break;//
        }
        fclose(f);
    }
    return yn;
}
void main(int argc,char **argv) {
    char cmdstr[256];
    int i;
    int IP[3];
    char c;

    if (argc<2) {
    USAGE:
        printf("Usage example:\n    %s 192.168.60.\nto test 192.168.60.1-254\n",argv[0]);
        return;
    }
    if (4==sscanf(argv[1],"%d.%d.%d%c",&IP[0],&IP[1],&IP[2],&c)) {
        if (0<=IP[0] && IP[0]<=255
         && 0<=IP[1] && IP[1]<=255
         && 0<=IP[2] && IP[2]<=255
         && '.'==c) {
            for (i=1;i<255;i++) {
                sprintf(cmdstr,"cmd /c ping %s%d -n 1 -w 1000 >d:\\ping%d.txt",argv[1],i,i);
                WinExec(cmdstr,SW_HIDE);
            }
            Sleep(3000);
            for (i=1;i<255;i++) {
                printf("%c %s%d\n",YN(i),argv[1],i);
            }
            Sleep(3000);
            WinExec("cmd /c del /q d:\\ping*.txt",SW_HIDE);
        } else goto USAGE;
    } else goto USAGE;
}