LinuxÒÁµéÔ°ÂÛ̳'s Archiver

Ó¥Óã ·¢±íÓÚ 2004-11-16 12:54

ÔõÑùÓÃJSP»ñÈ¡µ±Ç°Óû§µÄÍø¿¨IPºÍMACµØÖ·£¿

[color=#555555]·þÎñÆ÷ÊÇlinux
ÏëÓÃÒ»¸öÒ³Ãæ»ñÈ¡µ±Ç°Óû§µÄÍø¿¨ºÍMACµØÖ·¡£
ÔÚÍøÉÏÕÒµ½ÁËÕâ¸ö´úÂë¡£
----------------------------------------------------------------------
»ñÈ¡±¾µØÖ÷»úµÄMACµØÖ·
/*
FileName:MACHomework.java
Author:Á÷ÀËС×Ó
Date:2004-7-5
E-mail:qiyadeng@hotmail.com
Purpose:»ñÈ¡±¾µØÖ÷»úµÄMACµØÖ·
*/
import java.io.*;
import java.util.*; [/color]



public class MACHomework
{
static private final int MACLength=18;
public static void main(String args[])
{
System.out.print ("±¾»úµÄÎïÀíµØÖ·ÊÇ£º");
System.out.println(getMACAddress());
}
static public String getMACAddress()
{
SysCommand syscmd=new SysCommand();
//ϵͳÃüÁî
String cmd="cmd.exe /c ipconfig/all";
Vector result;
result=syscmd.execute(cmd);
return getCmdStr(result.toString());
}
static public String  getCmdStr(String outstr)
{
String find="Physical Address. . . . . . . . . :";
int findIndex=outstr.indexOf(find);
if(findIndex==-1)
{
  return "δ֪´íÎó£¡";
}
else
{
  return outstr.substring(findIndex+find.length()+1,findIndex+find.length()+MACLength);
}
}
}

//SysCommandÀà
class SysCommand
{
Process p;
public Vector execute(String cmd)
{
try
{
  Start(cmd);
  Vector  vResult=new Vector();
  DataInputStream in=new DataInputStream(p.getInputStream());
  BufferedReader myReader=new BufferedReader(new InputStreamReader(in));
  String line;
  do
  {
   line=myReader.readLine();
   if(line==null)
   {
    break;
   }
   else
   {
    vResult.addElement(line);
   }
  }while(true);
  myReader.close();
  return vResult;
}
catch(Exception e)
{
  return null;
  
}

}
public void Start(String cmd)
{
try
{
  if(p!=null)
  {
   kill();
  }
  Runtime sys=Runtime.getRuntime();
  p=sys.exec(cmd);
  
}
catch(Exception e)
{
  
}
}
public void kill()
{
if(p!=null)
{
  p.destroy ();
  p=null;
}
}

}
----------------------------------------------------------
Õâ¶Î´úÂë
ÔÚWIN2000ÏÂÔËÐÐͨ¹ý¡£
ÔÚLINUXÏÂÔËÐÐÌáʾ£º

java.lang.NullPointerException
at net.agent.MACHomework.getMACAddress(MACHomework.java:27)

ÊÇ¿ÕÖ¸Õ룬ÊDz»ÊÇÒòΪÕâ¾ä»°µÄÎÊÌ⣿
ÔÚLINUXϵͳÖÐûÓдËÃüÁËùÒԲųöÏÖÁË¿ÕÖ¸Õ룿

//ϵͳÃüÁî
String cmd="cmd.exe /c ipconfig/all"; Çë¸÷λÅóÓѰïæ£¬½â¾ö´ËÎÊÌ⣿ÏÈлÁË¡£

ghosttrain ·¢±íÓÚ 2004-11-16 21:19

above code uses system specified command to get network info, ipconfig for windows, ifconfig for linux. this's not a good solution. u can install pcap library (for both windows and linux), then use jpcap to get info from pcap :)

Ó¥Óã ·¢±íÓÚ 2004-11-17 09:41

ÎÒÊÇÏë»ñÈ¡¿Í»§¶ËÓû§µÄMACµØÖ·£¬Èç¹ûÓÃÁËIFCONFIG£¬¿Í»§¶ËÄÜͨ¹ýÂð£¿

ghosttrain ·¢±íÓÚ 2004-11-17 18:59

Get client's MAC?! No hope, normal user under linux can't run 'ifconfig'.
But we can read "proc" filesystem, try "cat /proc/net/arp".

Ó¥Óã ·¢±íÓÚ 2004-11-18 17:00

cat /proc/net/arp
Õâ¸öλÖÃÊÇÍø¹ØµÄMACµØÖ·£¬¶øÎÒÒª»ñÈ¡µÄÊǿͻ§¶ËÓû§»úÆ÷µÄMACµØÖ·£¬Õâ¸ö¾ÍÕæµÄûϣÍûÂð£¿
ΪºÎWINϵͳϾͿÉÒÔʵÏÖÄØ£¿

ghosttrain ·¢±íÓÚ 2004-11-18 21:34

The code you provide is just a normal standalone java application. It can only get its host's mac, no others'. JSP is Java Server Page, it runs on server side, not client side. I don't know how you can get client side's mac by JSP(Servlet) without a tool(pcap) of IP layer. Of course, if it's possible, you may use javascript to finish the work. JavaScript runs in client side's browser. But most browsers limit its power.

By the way, if any web page can get your mac without your permission, do you feel www is horrible?

Ò³: [1]

Powered by Discuz! Archiver 6.1.0  © 2001-2007 Comsenz Inc.