
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地址,客户端的主机名称等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)