请问大家,java中是怎么获得网卡地址的阿?在线等 这么底层的东东,java的 api里是没有的,实在是“想”的厉害的话可以用些小手段 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 可以调用系统的api试试看,java的api是没有提供这样的方法的,可以用用windows的configip命令得到阿! 我的系统不是windows啊,这该怎么办啊? 感觉只能调用C的DLL了,下面是我的程序,已经编译通过。<JAVA>package study;public class MacRead { public native String readMac(); public MacRead() { } public static void main(String[] args) { System.loadLibrary("MacDll"); MacRead mac= new MacRead(); System.out.println(mac.readMac()); }}<VS.NET 2003编译>JNIEXPORT jstring JNICALL Java_study_MacRead_readMac(JNIEnv *env, jobject){ CString strMAC; typedef struct _ASTAT_ { ADAPTER_STATUS adapt; NAME_BUFFER NameBuff [30]; }ASTAT, * PASTAT; NCB ncb; UCHAR uRetCode; ASTAT Adapter; BYTE MacAddr[6]; memset( &ncb, 0, sizeof(ncb) ); ncb.ncb_command = NCBRESET; ncb.ncb_lana_num = 0; uRetCode = Netbios( &ncb ); if (uRetCode!=0) { strMAC = "错误"; AfxMessageBox(strMAC); } memset( &ncb, 0, sizeof(ncb) ); ncb.ncb_command = NCBASTAT; ncb.ncb_lana_num = 0; strcpy( (char *)ncb.ncb_callname, "* " ); ncb.ncb_buffer =(unsigned char *) &Adapter; ncb.ncb_length = sizeof(Adapter); uRetCode = Netbios( &ncb ); if ( uRetCode == 0 ) { for( int i = 0; i < 6; i++ ) MacAddr[i] = Adapter.adapt.adapter_address[i]; } else { strMAC = "Init Error!"; AfxMessageBox(strMAC); } CHAR szAddr[20]; wsprintf(szAddr,_T("%02x-%02x-%02x-%02x-%02x-%02x"),MacAddr[0], MacAddr[1],MacAddr[2],MacAddr[3],MacAddr[4],MacAddr[5]); _tcsupr(szAddr); strMAC = szAddr; return env->NewStringUTF(strMAC); } 调用系统命令ipconfig /all。public static void main(String args[]) throws Exception{ String command = "c:\\winnt\\System32\\cmd.exe "; try { Process p = Runtime.getRuntime().exec(command); OutputStream ou = p.getOutputStream(); ou.write("ipconfig /all\n".getBytes()); ou.flush(); ou.write("exit\n".getBytes()); ou.flush(); ou.close(); InputStream in = p.getInputStream(); char[] test1 = null; int b; String ii = "test"; while ((b=in.read())!=-1){ ii += String.valueOf((char)b); } for(int i=0;i<ii.length();i++){ if(ii.charAt(i) =='P' && ii.charAt(i+1)=='h'){ System.out.print("网卡地址是:"); for(int j=i+36;j<i+53;j++){ System.out.print(ii.charAt(j)); } } } in.close(); //p.waitFor(); } catch (Exception e) { e.printStackTrace(); } } 你使用jpcap就可以了。 pcap = new PacketCapture(); String device = pcap.findDevice(); System.out.println("the device is:" + device); 要通过jni接口实现本地化代码来获得了 呵呵, 如果是win2000,可以用一些法子比如执行ipconfig,arp之类的程序,获取输出然后去判断,也是可以的 to unsalted(icebird) 如果要获得局域网所有机子上的网卡物理地址怎么做呀.! javaVegetable(风) 我用了,但不知道怎么不行?我不知道怎么用a?各位大虾,还有什么简单的方法阿 如果要获得局域网所有机子上的网卡物理地址怎么做呀.!用 arp 命令呀!! 先ping hostip然后arp -a hostip丫 to zceast(zceast) :JNIEXPORT jstring JNICALL Java_study_MacRead_readMac(JNIEnv *env, jobject)什么意思? to mashaw(寒玉) :这个是由javah生成的c/c++的函数原形 布局管理器间隔 java基础 HashMap 的size方法 在JAVA中如何启动不同功能的线程 求教:请问文件夹地址怎么取? 请教关于JTable的cell编辑问题 调用Appletviewer后,MyApplet为何显示没内容 在问关于java连接数据库的问题。 javac运行错误找不到或无法加载主类com.sun.tools.java.main 有关实现鼠标的双击功能的一点疑问 www.go2map.com里下载地图时出现的“正在查询请稍候”的图标是怎么出来的? Method是String类型,值是一个函数的方法名,如何实现这个方法的调用?
<JAVA>
package study;
public class MacRead { public native String readMac();
public MacRead() {
}
public static void main(String[] args) {
System.loadLibrary("MacDll");
MacRead mac= new MacRead();
System.out.println(mac.readMac());
}
}
<VS.NET 2003编译>
JNIEXPORT jstring JNICALL Java_study_MacRead_readMac
(JNIEnv *env, jobject){
CString strMAC; typedef struct _ASTAT_
{
ADAPTER_STATUS adapt;
NAME_BUFFER NameBuff [30];
}ASTAT, * PASTAT;
NCB ncb;
UCHAR uRetCode;
ASTAT Adapter;
BYTE MacAddr[6]; memset( &ncb, 0, sizeof(ncb) );
ncb.ncb_command = NCBRESET;
ncb.ncb_lana_num = 0;
uRetCode = Netbios( &ncb );
if (uRetCode!=0)
{
strMAC = "错误";
AfxMessageBox(strMAC);
} memset( &ncb, 0, sizeof(ncb) );
ncb.ncb_command = NCBASTAT;
ncb.ncb_lana_num = 0;
strcpy( (char *)ncb.ncb_callname, "* " );
ncb.ncb_buffer =(unsigned char *) &Adapter;
ncb.ncb_length = sizeof(Adapter);
uRetCode = Netbios( &ncb );
if ( uRetCode == 0 )
{
for( int i = 0; i < 6; i++ )
MacAddr[i] = Adapter.adapt.adapter_address[i];
}
else
{
strMAC = "Init Error!";
AfxMessageBox(strMAC);
}
CHAR szAddr[20];
wsprintf(szAddr,_T("%02x-%02x-%02x-%02x-%02x-%02x"),MacAddr[0],
MacAddr[1],MacAddr[2],MacAddr[3],MacAddr[4],MacAddr[5]);
_tcsupr(szAddr); strMAC = szAddr;
return env->NewStringUTF(strMAC);
}
public static void main(String args[]) throws Exception{
String command = "c:\\winnt\\System32\\cmd.exe ";
try {
Process p = Runtime.getRuntime().exec(command);
OutputStream ou = p.getOutputStream();
ou.write("ipconfig /all\n".getBytes());
ou.flush();
ou.write("exit\n".getBytes());
ou.flush();
ou.close();
InputStream in = p.getInputStream();
char[] test1 = null;
int b;
String ii = "test";
while ((b=in.read())!=-1){
ii += String.valueOf((char)b);
}
for(int i=0;i<ii.length();i++){
if(ii.charAt(i) =='P' && ii.charAt(i+1)=='h'){
System.out.print("网卡地址是:");
for(int j=i+36;j<i+53;j++){
System.out.print(ii.charAt(j));
} }
}
in.close(); //p.waitFor();
}
catch (Exception e) {
e.printStackTrace();
}
}
pcap = new PacketCapture();
String device = pcap.findDevice();
System.out.println("the device is:" + device);
比如执行ipconfig,arp之类的程序,获取输出
然后去判断,也是可以的
如果要获得局域网所有机子上的网卡物理地址怎么做呀.!
我用了,但不知道怎么不行?我不知道怎么用a?
各位大虾,还有什么简单的方法阿
用 arp 命令呀!!
然后arp -a hostip
丫
(JNIEnv *env, jobject)什么意思?
这个是由javah生成的c/c++的函数原形