网站建设资讯

NEWS

网站建设资讯

mac校验java代码 mac JAVA

如何使用Java代码获取Android和ios移动终端Mac地址

通过设备开通WiFi连接获取Mac地址是最可取的,代码如下:

我们拥有十载网页设计和网站建设经验,从网站策划到网站制作,我们的网页设计师为您提供的解决方案。为企业提供网站建设、做网站、微信开发、小程序开发、手机网站制作H5开发、等业务。无论您有什么样的网站设计或者设计方案要求,我们都将富于创造性的提供专业设计服务并满足您的需求。

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

/**

* 设备开通WiFi连接,通过wifiManager获取Mac地址

*

* @author 高焕杰

*/

public static String getMacFromWifi(Context context){

ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);

State wifiState = connectivityManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI).getState();

if(wifiState == NetworkInfo.State.CONNECTED){//判断当前是否使用wifi连接

WifiManager wifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);

if (!wifiManager.isWifiEnabled()) { //如果当前wifi不可用

wifiManager.setWifiEnabled(true);

}

WifiInfo wifiInfo = wifiManager.getConnectionInfo();

return wifiInfo.getMacAddress();

}

return null;

}

除了上面这种方法,网上还给出了另外两种方法:

1、通过调用Linux的busybox命令获取Mac地址:

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

/**

* 通过调用Linux的busybox命令获取Mac地址

*

* @author 高焕杰

*/

private static String getMacFromCallCmd(){

try {

String readLine = ;

Process process = Runtime.getRuntime().exec(busybox ifconfig);

BufferedReader bufferedReader = new BufferedReader (new InputStreamReader(process.getInputStream()));

while ((readLine = bufferedReader.readLine ()) != null) {//执行命令cmd,只取结果中含有HWaddr的这一行

if(readLine.contains(HWaddr)){

return readLine.substring(readLine.indexOf(HWaddr)+6, readLine.length()-1);

}

}

}catch(Exception e) { //如果因设备不支持busybox工具而发生异常。

e.printStackTrace();

}

return null;

}

注意:这种方法在Android Pad中可以准确获取到的Mac地址,但是在Android手机中无法准确获取到。

2、通过查询记录了MAC地址的文件(文件路径:“/proc/net/arp”)获取Mac地址:

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

/**

* 通过查询记录了MAC地址的文件(文件路径:“/proc/net/arp”)获取Mac地址

*

* @author 高焕杰

*/

private static String getMacFromFile(Context context){

String readLine =;

BufferedReader bufferedReader = null;

try {

bufferedReader = new BufferedReader(new FileReader(new File(/proc/net/arp)));

int rollIndex = 0;

while((readLine = bufferedReader.readLine())!=null){

if(rollIndex == 1){

break;

}

rollIndex = rollIndex + 1;

}

} catch (IOException e) {

e.printStackTrace();

} finally {

if (bufferedReader != null) {

try {

bufferedReader.close();

} catch (IOException e) {

e.printStackTrace();

}

}

}

if(readLine !=null readLine.length()1){

String[] subReadLineArray = readLine.split( );

int rollIndex = 1;

for(int i = 0; i subReadLineArray.length; ++i){

if(!TextUtils.isEmpty(subReadLineArray[i])){

if(rollIndex == 4){

return subReadLineArray[i];

}

rollIndex = rollIndex + 1;

}

}

}

return null;

}

注意:无论在Android Pad中还是在Android手机中,这种方法都无法准确获取到Mac地址。

mac算法查数据传输完整性 用Java实现

一般是在数据的尾部增加一个信息摘要,一般用MD5、SHA、CRC32等算法计算。

MD5、SHA可以参考javax.security中的加密部分。

boolean CheckMac (byte [] data, int macOffset)

{

byte [] orgMac = new byte [data.length - macOffset] ;

ArrayCopy (orgMac, data, macOffset, orgMac.length) ;

byte [] mac = ComputeMac (data, 0, macOffset) ; ...计算的mac

// 比较mac是否相等

for (int i = 0 ; i orgMac.length ; i ++)

if (orgMac [i] != mac [i]) return false ;

return true ;

}

如何把下面的javaMAC校验码用c#实现

没什么问题,eclipse之类的有mac版的,可以用做java/android开发,c#的话一般开发环境是windows下的vs,所以你要么在mac下用vmware之类的虚拟机来运行windows,要么用bootcamp之类的装win8双系统。

JAVA中正则表达式验证 MAC地址要求是例如23:34:3e:5f:33:3d

String patternMac="^[a-fA-F0-9]{2}+:[a-fA-F0-9]{2}+:[a-fA-F0-9]{2}+:[a-fA-F0-9]{2}+:[a-fA-F0-9]{2}+:[a-fA-F0-9]{2}$";

Pattern pa= Pattern.compile(patternMac);

System.out.println(pa.matcher("23:34:3e:5f:33:3d").find());

不知道是不是你想要的,我也是刚学

求获取客户端mac地址java代码,急需急需,麻烦了

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

request.getRemoteAddr();

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

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

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

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

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

public String getMACAddress(String ip){

String str = "";

String macAddress = "";

try {

Process p = Runtime.getRuntime().exec("nbtstat -A " + ip);

InputStreamReader ir = new InputStreamReader(p.getInputStream());

LineNumberReader input = new LineNumberReader(ir);

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

str = input.readLine();

if (str != null) {

if (str.indexOf("MAC Address") 1) {

macAddress = str.substring(str.indexOf("MAC Address") + 14, str.length());

break;

}

if (str.indexOf("MAC Address") 1) {

macAddress = str.substring(str.indexOf("MAC 地址") + 14, str.length());

break;

}

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

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

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

}

}

} catch (IOException e) {

e.printStackTrace(System.out);

}

return macAddress;

}

附:

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

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

public String getRemortIP(HttpServletRequest request) {

if (request.getHeader("x-forwarded-for") == null) {

return request.getRemoteAddr();

}

return request.getHeader("x-forwarded-for");

}

获得客户端真实IP地址的方法二:

public String getIpAddr(HttpServletRequest request) {

String ip = request.getHeader("x-forwarded-for");

if(ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {

ip = request.getHeader("Proxy-Client-IP");

}

if(ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {

ip = request.getHeader("WL-Proxy-Client-IP");

}

if(ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {

ip = request.getRemoteAddr();

}

return ip;

}

可是,如果通过了多级反向代理的话,X-Forwarded-For的值并不止一个,而是一串IP值,究竟哪个才是真正的用户端的真实IP呢?

答案是取X-Forwarded-For中第一个非unknown的有效IP字符串。如:

X-Forwarded-For:192.168.1.110, 192.168.1.120, 192.168.1.130, 192.168.1.100

用户真实IP为: 192.168.1.110


分享文章:mac校验java代码 mac JAVA
浏览路径:http://njwzjz.com/article/hhpgdd.html