JAVA中如何获取指定IP的MAC地址

JAVA中如何获取指定IP的MAC地址,第1张

public static String getMacAddressIP(String remotePcIP) {

String str = "";

String macAddress = "";

try {

Process pp = RuntimegetRuntime()exec("nbtstat -A " + remotePcIP);

InputStreamReader ir = new InputStreamReader(ppgetInputStream());

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;

}

}

}

} catch (IOException ex) {

}

return macAddress;

}

试试这个

/

  Project Name [java-projects]

  File Name      [comcessutilAuditUtiljava]

  Creation Date  [2016-11-28]

  <p/>

  Copyright© 2016 geyyang@hotmailcom All Rights Reserved

  <p/>

  Work hard, play harder, think big and keep fit

 /

package comcessutil;

import javaxservlet>

这个网上很多,主要是机器必须支持ICMP和NETBIOS协议。你参考一下:

public String getIP()

{

InetAddress inet;

try {

inet =

InetAddressgetLocalHost();

InetAddressgetByName("");

return

inetgetHostAddress();

} catch (UnknownHostException e) {

// TODO

Auto-generated catch block

eprintStackTrace();

}

return "";

}

一:问题:如何获得本机/远程主机的MAC地址,且不受 *** 作系统类型的限制,也不受本机和远程主机是否在同一个LAN中的限制。

二:解决的方法

注:就我所看到的有关“如何获得本机/远程主机的MAC地址”的方法总结如下。

这些方法及程序参考了本站及其他站点,以及用google搜索到的一些牛人的解法和源代码,我在此对他们深表感谢,在此就不说他们的大名了。

我所总结的方法和以及我写的代码一定存在许多不足,敬请各位同志斧正!!!

欢迎讨论!!!如果您认为值得转载的话,欢迎转载。

(一)获得本机的MAC地址

1:在WINDOWS 2000/XP下,使用ipconfig /all ,或者route print ,或者nbtstat 本机的IP地址;

2:在Linux/UNIX/类UNIX下,使用ifconfig;

3:自己写程序/参考牛人的程序实现,其原理可以参考arp协议;

(二)获得同一个LAN中主机的MAC地址

1:先ping目标主机,然后察看arp表,该方法不受 *** 作系统类型的限制;

2:在WINDOWS 2000/XP下,用nbtstat + 目标主机的IP地址;

3:在Linux下,用nbtstat + 目标主机的IP地址。(Linux系统本身没有提供,

但是在本站的“网络编程”版有一段用C语言写的原码,实现了WINDOWS下的nbtstat命令的部分功能。那段原码里面多了一个“}”符号);

注:2,3两种方法都只适合于目标主机是WINDOWS系统,且目标主机的137(135-139)端口是开放的。

4:自己写程序/参考牛人的程序实现,其原理可以参考arp协议;

(三)获得远程主机的MAC地址

1:在WINDOWS 2000/XP下,用nbtstat + 目标主机的IP地址;

2:在Linux下,用nbtstat + 目标主机的IP地址。(Linux系统本身没有提供,

但是在本站的“网络编程”版有一段用C语言写的原码,实现WINDOWS下的nbtstat命令的部分功能。那段原码里面多了一个“}”符号);

注:1,2两种方法都只适合于目标主机是WINDOWS系统,且目标主机的137(135-139)端口是开放的。

3:自己写程序/参考牛人的程序实现

三:我自己现在不是牛人,没有对问题给出一个圆满的解决方案。下面是我参考各位牛人的一些思想和源代码,在Java中通过系统调用实现的一段程序。该程序我已经在WINDOWS XP和RedHat Linux 90下测试通过。(要求系统只配了一个以太网卡,如有两块网卡,只能检测出其中的一块网卡的MAC地址,且可能造成显示的MAC/IP地址对与实际的MAC/IP地址对不符。)

importjavanet;classIpconfig{publicstaticvoidmain(String[]arguments)throwsException{InetAddressia=InetAddressgetLocalHost();//获取本地IP对象Systemoutprintln(MAC+getMACAddress(ia));}//获取MAC地址的方法privatestaticStringgetMACAddress(InetAddressia)throwsException{//获得网络接口对象(即网卡),并得到mac地址,mac地址存在于一个byte数组中。byte[]mac=NetworkInterfacegetByInetAddress(ia)getHardwareAddress();//下面代码是把mac地址拼装成StringStringBuffersb=newStringBuffer();for(inti=0;i<maclength;i++){if(i!=0){sbappend(-);}//mac[i]&0xFF是为了把byte转化为正整数Strings=IntegertoHexString(mac[i]&0xFF);sbappend(slength()==1

指定IP的MAC

代码如下:

Java

code

Systemoutprintln("1921681187对应网卡的MAC是:");NetworkInterface

ne=NetworkInterfacegetByInetAddress(InetAddressgetByName("1921681187"));byte[]mac=negetHardwareAddress();String

mac_s=hexByte(mac[0])+":"+hexByte(mac[1])+":"+

hexByte(mac[2])+":"+hexByte(mac[3])+":"+

hexByte(mac[4])+":"+hexByte(mac[5]);Systemoutprintln(mac_s);

程序运行结果:

1921681187对应网卡的MAC是:

00:0c:f1:20:75:58

工作组和

计算机

名字类似,可以到库里找

import javaioBufferedReader;

import javaioIOException;

import javaioInputStreamReader;

public class ClientSocket {

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

        getString();

    }

    //获取本机全部MAC地址

    private static void getString() throws IOException{

        Process  p = RuntimegetRuntime()exec("cmd /C ipconfig /all");

        BufferedReader br = new BufferedReader(new InputStreamReader(pgetInputStream()));

        String str = null;

        String Name_Mac = "";

        while((str=brreadLine())!=null){

            try {

                if(!strsubstring(0, 1)equals(" "))

                    Name_Mac += str+"  ";

                else if(strindexOf("Physical Address")!=-1){

                    Name_Mac += strsubstring(strindexOf(":")+1)+"\n";

                }

            } catch (Exception e) {}

        }

        Systemoutprintln(Name_Mac);

    }

}

//测试结果,Mac我必须修改一下,Sorry,另外请封装返回参数

Windows IP Configuration  Ethernet adapter VMware Network Adapter VMnet8:   00-50-56-C0-0X-XX

Ethernet adapter VMware Network Adapter VMnet1:   00-50-56-C0-0X-XX

Ethernet adapter 无线网络连接:   74-E5-43-63-D4-XX

//第一行多了Windows IP Configuration  Ethernet adapter,自己加个判断一下吧,着急下班,拜。

以上就是关于JAVA中如何获取指定IP的MAC地址全部的内容,包括:JAVA中如何获取指定IP的MAC地址、java servelet 取客户端MAC地址的问题、在Linux系统下用Java语言获取客户端的IP地址,MAC地址,客户端的主机名称等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

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

原文地址:https://54852.com/web/9457618.html

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

发表评论

登录后才能评论

评论列表(0条)

    保存