同一网段内一台主机的IP地址,通过以下哪种方式可以获取其MAC地址

同一网段内一台主机的IP地址,通过以下哪种方式可以获取其MAC地址,第1张

DOS窗口,输入: arp -a,显示所有机器mac。

或者下个局域网软件,点击扫描。比如IP BOOK

FYI:

有时候,我们需要获得所在局域网中所有的主机的MAC地址,不巧,手中又恰恰没有合适的软件。难道我们就束手无策了么?

其实,使用一些DOS命令,完全可以胜任这个工作,而且,效果会比某些软件好的多。

下面介绍下我的思路:

还记得ARP命令么?,利用ARP缓存信息,就可以得到我想要的局域网机器的MAC地址了。呵呵,理了一下思路,动手 *** 作,效果非常好,就连一些试用版、破解版的MAC扫描工具扫不出的有些机器的信息ARP里都有!如何实施呢?

用Ping 命令,先Ping 一下局域网中的机器IP,因为我想在本地机器的ARP缓存信息里得到想要的MAC地址信息。只有Ping 过局域网中在线机器,本地机器的ARP缓存就会记录下Ping 过的机器的IP与MAC地址信息,也就是说,本地机器发出个数据包,目标机器会有一个应答,这个应答里含有IP地址和MAC地址的信息,这些个信息会晢存 在本地机器的ARP缓存里。在本地机器上,用ARP -a就可全部显示出来了。(防火墙或者过滤包的方法也无法禁止ARP的查看,远程计算机不返回Ping成功的消息但会告诉本地计算机该IP地址对应的 MAC地址。有些MAC扫描工具因对方防火墙的原因而无法得到对方的IP和Mac信息。)

有了这些思路,就差不多了。可我总不能一个一个的去Ping 啊,于是我就写个批处理,批量检测局域网中在线的机器。例如要查看1921680这个网段中有哪些地址在线。在桌面上点鼠标右键新建一个文本文件后输入如下代码:

FOR /L %%i IN (0,1,255) Do ping 1921680%%i -n 1

arp -a -> MACtxt

将该文件保存为bat文件,双击这个批处理文件将自动搜索网段中的所有IP,并且将发现出的ARP信息都保存到MACtxt文件中。

arp –a ->MACtxt 这行命令表示将ARP显示的结果保存到 MACtxt的文本文件中。

如果只是想Ping某一部分IP而不是所有该网段中的IP,可以将上面命令行中 IN(0,1,255) 中1,255是<指IP的范围>改写。

注意:批处理没有程序报错功能,所以,IP的范围应严格在1,255之间,防止机器执行批处理时发生意外^_^)。比如,我只想扫描192168010至1921680200之间的IP与MAC信息,可以这样写:

FOR /L %%i IN (0,10,200) Do ping 1921680%%i -n 1

arp -a -> MACtxt

提示:扫描过程中可以使用“ctrl+c”命令进行中断。

import javanetInetAddress;

import javanetNetworkInterface;

/

@author:

@version:

@description:

/

public class Ipconfig {

public static void main(String[] args) throws Exception {

try {

InetAddress ia=InetAddressgetLocalHost();

String localname=iagetHostName();

String localip=iagetHostAddress();

Systemoutprintln("本机名称是:"+ localname);

Systemoutprintln("本机的ip是 :"+localip);

Systemoutprintln("MAC "+getMACAddress(ia));

} catch (Exception e) {

eprintStackTrace();

}

}

//获取MAC地址的方法

private static String getMACAddress(InetAddress ia)throws Exception{

//获得网络接口对象(即网卡),并得到mac地址,mac地址存在于一个byte数组中。

byte[] mac = NetworkInterfacegetByInetAddress(ia)getHardwareAddress();

//下面代码是把mac地址拼装成String

StringBuffer sb = new StringBuffer();

for(int i=0;i<maclength;i++){

if(i!=0){

sbappend("-");

}

//mac[i] & 0xFF 是为了把byte转化为正整数

String s = IntegertoHexString(mac[i] & 0xFF);

sbappend(slength()==10+s:s);

}

//把字符串所有小写字母改为大写成为正规的mac地址并返回

return sbtoString()toUpperCase();

}

}

package comalphatest;

import javaioBufferedReader;

import javaioIOException;

import javaioInputStream;

import javaioInputStreamReader;

import javaioLineNumberReader;

public class GetMac {

/

java获取客户端网卡的MAC地址

@param args

/

public static void main(String[] args) {

GetMac get = new GetMac();

Systemoutprintln("1="+getgetMAC());

Systemoutprintln("2="+getgetMAC("127001"));

}

// 1获取客户端ip地址( 这个必须从客户端传到后台):

// jsp页面下,很简单,requestgetRemoteAddr() ;

// 因为系统的VIew层是用JSF来实现的,因此页面上没法直接获得类似request,在bean里做了个强制转换

// public String getMyIP() {

// try {

// FacesContext fc = FacesContextgetCurrentInstance();

// >

通过ip获取指定ip地址的mac地址,ip可以通过请求request获取,

requestgetRemoteAddr();

(当然获取ip也不是在任何情况下都有效的)

通过了Apache,Squid等反向代理软件就不能获取到客户端的真实IP地址。

您也许需要通过其他的方式获取,(见附)

//获取mac如下 (nbtstat -A IPAddress是对给定的IP地址解析其主机名。如果不能正常解析它的主机

//名的话,有可能是防火墙屏蔽了。也可能是在DNS中将NetBios 解析选项屏蔽了。)

public String getMACAddress(String ip){

String str = "";

String macAddress = "";

try {

Process p = RuntimegetRuntime()exec("nbtstat -A " + ip);

InputStreamReader ir = new InputStreamReader(pgetInputStream());

LineNumberReader input = new LineNumberReader(ir);

for (int i = 1; i < 100; i++) {

str = inputreadLine();

if (str != null) {

if (strindexOf("MAC Address") > 1) {

macAddress = strsubstring(strindexOf("MAC Address") + 14, strlength());

break;

}

if (strindexOf("MAC Address") > 1) {

macAddress = strsubstring(strindexOf("MAC 地址") + 14, strlength());

break;

}

//以上有个判断,不同系统cmd命令执行的返回结果展示方式不一样,我测试的win7是MAC 地址

//所以又第二个if判断 你可先在你机器上cmd测试下nbtstat -A 命令 当然得有一个你可以ping通的

//网络ip地址,然后根据你得到的结果中mac地址显示方式来确定这个循环取值

}

}

} catch (IOException e) {

eprintStackTrace(Systemout);

}

return macAddress;

}

附:

通过代理了的客户端ip地址获取方式

于是可得出获得客户端真实IP地址的方法一:

public String getRemortIP(>

1, 在JSP页面导入javanet

2 获得IP地址代码

 InetAddress hostAndIP = null;

    try {

             hostAndIP = InetAddressgetLocalHost();

     } catch (UnknownHostException e) {

            eprintStackTrace();

     }

     String ip = hostAndIPtoString();

3 获得mac地址的方法, 接上

  byte[] mac = new byte[0];

        try {

            InetAddress hostAndIP = hostAndIPgetLocalHost();

            mac = NetworkInterfacegetByInetAddress(hostAndIP)getHardwareAddress();

        } catch (SocketException e) {

        } catch (UnknownHostException e) {

        }

        StringBuffer buffer = new StringBuffer("");

        for (int i = 0; i < maclength; i++) {

            if (i != 0) {

                bufferappend("-");

            }

            //字节转换为整数

            int temp = mac[i] & 0xff;

            String str = IntegertoHexString(temp);

            if (strlength() == 1) {

                bufferappend("0" + str);

            } else {

                bufferappend(str);

            }

        }

        String mac= buffertoString();

这种是直接把代码写在页面上,建议封装一个工具类直接在页面上导入后调用方法获得IP和MAC,或者写成自定义标签

以上就是关于同一网段内一台主机的IP地址,通过以下哪种方式可以获取其MAC地址全部的内容,包括:同一网段内一台主机的IP地址,通过以下哪种方式可以获取其MAC地址、java如何不使用HttpServletRequest获取电脑客户端ip地址与Mac地址。、Java web 怎么得到客户端的Mac地址等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/9796122.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-02
下一篇 2023-05-02

发表评论

登录后才能评论

评论列表(0条)

保存