Rumah Java javaTutorial 多种获得MAC用户IP的实例方法

多种获得MAC用户IP的实例方法

May 05, 2017 pm 02:25 PM

这篇文章主要介绍了JAVA实现获取用户的MAC地址的多种方法实例,需要的朋友可以参考下

java实现获取用户的MAC地址方法:

方法一:将本机地址与局域网内其他机器区分开来

/**
  * 根据IP地址获取mac地址
  * @param ipAddress 127.0.0.1
  * @return
  * @throws SocketException
  * @throws UnknownHostException
  */
 public static String getLocalMac(String ipAddress) throws SocketException,
   UnknownHostException {
  // TODO Auto-generated method stub
  String str = "";
  String macAddress = "";
  final String LOOPBACK_ADDRESS = "127.0.0.1";
  // 如果为127.0.0.1,则获取本地MAC地址。
  if (LOOPBACK_ADDRESS.equals(ipAddress)) {
   InetAddress inetAddress = InetAddress.getLocalHost();
   // 貌似此方法需要JDK1.6。
   byte[] mac = NetworkInterface.getByInetAddress(inetAddress)
     .getHardwareAddress();
   // 下面代码是把mac地址拼装成String
   StringBuilder sb = new StringBuilder();
   for (int i = 0; i < mac.length; i++) {
    if (i != 0) {
     sb.append("-");
    }
    // mac[i] & 0xFF 是为了把byte转化为正整数
    String s = Integer.toHexString(mac[i] & 0xFF);
    sb.append(s.length() == 1 ? 0 + s : s);
   }
   // 把字符串所有小写字母改为大写成为正规的mac地址并返回
   macAddress = sb.toString().trim().toUpperCase();
   return macAddress;
  } else {
   // 获取非本地IP的MAC地址
   try {
    System.out.println(ipAddress);
    Process p = Runtime.getRuntime()
      .exec("nbtstat -A " + ipAddress);
    System.out.println("===process=="+p);
    InputStreamReader ir = new InputStreamReader(p.getInputStream());      
    BufferedReader br = new BufferedReader(ir);    
    while ((str = br.readLine()) != null) {
     if(str.indexOf("MAC")>1){
      macAddress = str.substring(str.indexOf("MAC")+9, str.length());
      macAddress = macAddress.trim();
      System.out.println("macAddress:" + macAddress);
      break;
     }
    }
    p.destroy();
    br.close();
    ir.close();
   } catch (IOException ex) {
   }
   return macAddress;
  }
 }
Salin selepas log masuk

我们再来看下方法二:

package com.alpha.test;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.LineNumberReader; 
public class GetMac { 
  /**
   * java获取客户端网卡的MAC地址
   * 
   * @param args
   */
  public static void main(String[] args) {
    GetMac get = new GetMac();
    System.out.println("1="+get.getMAC());
    System.out.println("2="+get.getMAC("127.0.0.1"));
  } 
  // 1.获取客户端ip地址( 这个必须从客户端传到后台):
  // jsp页面下,很简单,request.getRemoteAddr() ;
  // 因为系统的VIew层是用JSF来实现的,因此页面上没法直接获得类似request,在bean里做了个强制转换 
  // public String getMyIP() {
  // try {
  // FacesContext fc = FacesContext.getCurrentInstance();
  // HttpServletRequest request = (HttpServletRequest) fc
  // .getExternalContext().getRequest();
  // return request.getRemoteAddr();
  // } catch (Exception e) {
  // e.printStackTrace();
  // }
  // return "";
  // } 
  // 2.获取客户端mac地址
  // 调用window的命令,在后台Bean里实现 通过ip来获取mac地址。方法如下:
  // 运行速度【快】
  public String getMAC() {
    String mac = null;
    try {
      Process pro = Runtime.getRuntime().exec("cmd.exe /c ipconfig/all"); 
      InputStream is = pro.getInputStream();
      BufferedReader br = new BufferedReader(new InputStreamReader(is));
      String message = br.readLine(); 
      int index = -1;
      while (message != null) {
        if ((index = message.indexOf("Physical Address")) > 0) {
          mac = message.substring(index + 36).trim();
          break;
        }
        message = br.readLine();
      }
      System.out.println(mac);
      br.close();
      pro.destroy();
    } catch (IOException e) {
      System.out.println("Can&#39;t get mac address!");
      return null;
    }
    return mac;
  }
  // 运行速度【慢】
  public String getMAC(String ip) {
    String str = null;
    String macAddress = null;
    try {
      Process p = Runtime.getRuntime().exec("nbtstat -A " + ip);
      InputStreamReader ir = new InputStreamReader(p.getInputStream());
      LineNumberReader input = new LineNumberReader(ir);
      for (; true;) {
        str = input.readLine();
        if (str != null) {
          if (str.indexOf("MAC Address") > 1) {
            macAddress = str
                .substring(str.indexOf("MAC Address") + 14);
            break;
          }
        }
      }
    } catch (IOException e) {
      e.printStackTrace(System.out);
      return null;
    }
    return macAddress;
  }
}
Salin selepas log masuk

方法三,更精简一些:

import java.io.IOException;
import java.io.InputStreamReader;
import java.io.LineNumberReader;
public class MACAddress {
 String ip;
 String mac;
 public MACAddress (String ip){
 this.ip = ip;
 }
 public MACAddress (){
 this.ip = "0.0.0.0";
 }
 public String getMac(){
 try {
 Process p = Runtime.getRuntime().exec("arp -n");
  InputStreamReader ir = new InputStreamReader(p.getInputStream());
  LineNumberReader input = new LineNumberReader(ir);
  p.waitFor();
  boolean flag = true;
  String ipStr = "(" + this.ip + ")";
  while(flag) {
  String str = input.readLine();
  if (str != null) {
   if (str.indexOf(ipStr) > 1) {
   int temp = str.indexOf("at");
   this.mac = str.substring(
   temp + 3, temp + 20);
   break;
   }
  } else
  flag = false;
  }
 } catch (IOException | InterruptedException e) {
  e.printStackTrace(System.out);
 }
 return this.mac;
 }
 public void setIp(String ip){
 this.ip = ip;
 }
}
Salin selepas log masuk

最后要放大招了,小伙伴们看仔细哦

首先要说的是:本方法可以支持外网机器的mac地址获取。

以前弄了一个只能访问局域网。 有防火墙就访问不了, 但是这个不用担心了。

测试了百度的ip,已经可以获得mac地址

java通过ip获取mac地址-封ip封mac地址

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.regex.Matcher;
import java.util.regex.Pattern; 
/**
* 获取MAC地址
* @author
* 2011-12
*/
public class GetMacAddress {
  public static String callCmd(String[] cmd) { 
   String result = ""; 
   String line = ""; 
   try { 
    Process proc = Runtime.getRuntime().exec(cmd); 
    InputStreamReader is = new InputStreamReader(proc.getInputStream()); 
    BufferedReader br = new BufferedReader (is); 
    while ((line = br.readLine ()) != null) { 
    result += line; 
    } 
   } 
   catch(Exception e) { 
    e.printStackTrace(); 
   } 
   return result; 
  }
  /** 
  * 
  * @param cmd 第一个命令 
  * @param another 第二个命令 
  * @return 第二个命令的执行结果 
  */
  public static String callCmd(String[] cmd,String[] another) { 
   String result = ""; 
   String line = ""; 
   try { 
    Runtime rt = Runtime.getRuntime(); 
    Process proc = rt.exec(cmd); 
    proc.waitFor(); //已经执行完第一个命令,准备执行第二个命令 
    proc = rt.exec(another); 
    InputStreamReader is = new InputStreamReader(proc.getInputStream()); 
    BufferedReader br = new BufferedReader (is); 
    while ((line = br.readLine ()) != null) { 
     result += line; 
    } 
   } 
   catch(Exception e) { 
    e.printStackTrace(); 
   } 
   return result; 
  }
  /** 
  * 
  * @param ip 目标ip,一般在局域网内 
  * @param sourceString 命令处理的结果字符串 
  * @param macSeparator mac分隔符号 
  * @return mac地址,用上面的分隔符号表示 
  */
  public static String filterMacAddress(final String ip, final String sourceString,final String macSeparator) { 
   String result = ""; 
   String regExp = "((([0-9,A-F,a-f]{1,2}" + macSeparator + "){1,5})[0-9,A-F,a-f]{1,2})"; 
   Pattern pattern = Pattern.compile(regExp); 
   Matcher matcher = pattern.matcher(sourceString); 
   while(matcher.find()){ 
    result = matcher.group(1); 
    if(sourceString.indexOf(ip) <= sourceString.lastIndexOf(matcher.group(1))) { 
     break; //如果有多个IP,只匹配本IP对应的Mac. 
    } 
   }  
   return result; 
  }   
  /** 
  * 
  * @param ip 目标ip 
  * @return Mac Address 
  * 
  */
  public static String getMacInWindows(final String ip){ 
   String result = ""; 
   String[] cmd = { 
     "cmd", 
     "/c", 
     "ping " + ip 
     }; 
   String[] another = { 
     "cmd", 
     "/c", 
     "arp -a"
     }; 
   String cmdResult = callCmd(cmd,another); 
   result = filterMacAddress(ip,cmdResult,"-"); 
   return result; 
  }  
  /** 
  * @param ip 目标ip 
  * @return Mac Address 
  * 
  */
  public static String getMacInLinux(final String ip){ 
   String result = ""; 
   String[] cmd = { 
     "/bin/sh", 
     "-c", 
     "ping " + ip + " -c 2 && arp -a"
     }; 
   String cmdResult = callCmd(cmd); 
   result = filterMacAddress(ip,cmdResult,":"); 
   return result; 
  }  
  /**
  * 获取MAC地址 
  * @return 返回MAC地址
  */
  public static String getMacAddress(String ip){
   String macAddress = "";
   macAddress = getMacInWindows(ip).trim();
   if(macAddress==null||"".equals(macAddress)){
    macAddress = getMacInLinux(ip).trim();
   }
   return macAddress;
  }
  //做个测试
  public static void main(String[] args) {   
   System.out.println(getMacAddress("220.181.111.148"));
  }
 }
Salin selepas log masuk

【相关推荐】

1. Java免费视频教程

2. JAVA教程手册

3. 全面解析Java注解

Atas ialah kandungan terperinci 多种获得MAC用户IP的实例方法. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Tetapan grafik terbaik
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Cara Memperbaiki Audio Jika anda tidak dapat mendengar sesiapa
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Cara Membuka Segala -galanya Di Myrise
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Tiada jawapan apabila memasukkan kata laluan pada papan kekunci mac? Tiada jawapan apabila memasukkan kata laluan pada papan kekunci mac? Feb 20, 2024 pm 01:33 PM

Pengenalan: Dalam artikel ini, laman web ini akan memperkenalkan kepada anda kandungan yang berkaitan tentang papan kekunci Mac yang tidak bertindak balas apabila memasukkan kata laluan saya harap ia akan membantu anda, mari lihat. Bagaimana untuk menyelesaikan masalah bahawa kata laluan tidak boleh dimasukkan pada sistem Apple Mac Anda juga boleh cuba menyambungkan papan kekunci ini ke komputer lain untuk melihat sama ada ia berfungsi seperti biasa. Jika masalah yang sama berlaku pada komputer lain, kemungkinan besar ia adalah kesalahan pada papan kekunci itu sendiri. Anda boleh mempertimbangkan untuk menggantikan papan kekunci atau membaikinya. Kali pertama anda log masuk ke Alipay dengan komputer Mac anda, anda akan menemui antara muka log masuk dan tidak boleh memasukkan kata laluan anda. Medan input kata laluan memaparkan: "Sila klik di sini untuk memasang kawalan", jadi log masuk Alipay memerlukan pemasangan kawalan keselamatan. Kawalan keselamatan boleh menyulitkan dan melindungi maklumat yang anda masukkan (jumlah, kata laluan, dll.) untuk meningkatkan keselamatan akaun. Tali leher

3 petua untuk menyesuaikan nama komputer Mac anda, nama hos dan nama Bonjour dengan mudah 3 petua untuk menyesuaikan nama komputer Mac anda, nama hos dan nama Bonjour dengan mudah Mar 06, 2024 pm 12:20 PM

Ramai pengguna Mac cenderung untuk mengekalkan nama lalai peranti mereka dan mungkin tidak pernah mempertimbangkan untuk menukarnya. Ramai orang memilih untuk mengekalkan nama itu daripada persediaan awal, seperti "Johnny's MacBook Air" atau hanya "iMac." Mempelajari cara menukar nama Mac anda ialah kemahiran yang sangat berguna, terutamanya apabila anda mempunyai berbilang peranti, kerana ia boleh membantu anda membezakan dan mengurusnya dengan cepat. Seterusnya, kami akan mengajar anda langkah demi langkah cara menukar nama komputer, nama hos dan nama Bonjour (nama hos tempatan) dalam sistem macOS. Mengapa anda perlu menukar nama Mac anda? Menukar nama Mac anda bukan sahaja boleh menunjukkan keperibadian anda, tetapi juga membantu meningkatkan pengalaman pengguna: Peribadikan Mac anda: Nama lalai mungkin tidak mengikut citarasa anda, tukar kepada nama yang anda suka

Terlupa kata laluan pemasang mac anda? Terlupa kata laluan pemasang mac anda? Feb 20, 2024 pm 01:00 PM

Pengenalan: Dalam artikel ini, laman web ini akan memperkenalkan kepada anda kandungan yang berkaitan tentang melupakan kata laluan program pemasangan Mac Saya harap ia akan membantu anda, mari kita lihat. Perkara yang perlu dilakukan jika anda terlupa kata laluan anda untuk perisian pemasangan komputer Apple Pertama, cari iCloud dalam tetapan telefon dan klik untuk membukanya. Seterusnya, masukkan nombor akaun dan kata laluan anda. Terdapat baris perkataan kecil di bawah butang log masuk yang menggesa anda jika anda terlupa ID atau kata laluan anda Klik pilihan ini. Biasanya, selepas anda memasukkan kata laluan yang salah beberapa kali pada antara muka log masuk, MacBook Pro anda akan menggesa anda untuk menggunakan Apple ID terikat anda untuk menetapkan semula kata laluan anda. Anda hanya perlu mengikuti langkah-langkah yang digesa oleh sistem untuk melengkapkan tetapan semula kata laluan. 3. Mula-mula matikan Mac anda, kemudian mulakan semula Sambil menekan butang kuasa, segera tekan dan tahan com pada papan kekunci.

pkg untuk dipasang pada mac? pkg untuk dipasang pada mac? Feb 20, 2024 pm 03:21 PM

Prakata: Hari ini, tapak ini akan berkongsi dengan anda kandungan yang berkaitan tentang memasang fail pkg pada Mac Jika ia dapat menyelesaikan masalah yang anda hadapi sekarang, jangan lupa untuk mengikuti tapak ini dan mulakan sekarang! Versi sebelumnya macos pkg tidak boleh dipasang untuk menaik taraf sistem pengendalian: Jika komputer riba anda menggunakan versi sistem pengendalian yang lebih lama, adalah disyorkan untuk menaik taraf kepada versi sistem pengendalian terkini. Kerana versi lama mungkin tidak menyokong pemasangan sistem macOS terkini. Pilih "Padam" dalam Utiliti Cakera, kemudian pilih sambungan Macos dalam format, jangan semak pilihan penyulitan, dan jangan pilih format apfs, dan akhirnya klik butang "Padam" untuk menyelesaikan masalah tidak dapat menyelesaikan pemasangan macOS. Seret ikon aplikasi ke fail bermula dengan Apl

Bagaimana untuk menukar halaman semasa menaip pada Apple Mac? Bagaimana untuk menukar halaman semasa menaip pada Apple Mac? Feb 20, 2024 pm 12:54 PM

Pengenalan: Hari ini, tapak ini akan berkongsi dengan anda kandungan yang berkaitan tentang cara menukar halaman semasa menaip pada Apple Mac Jika ia dapat menyelesaikan masalah yang anda hadapi sekarang, jangan lupa untuk mengikuti tapak ini dan mulakan sekarang! Petua untuk menggunakan pad sentuh pada komputer riba Apple MacBook Langkah-langkah untuk menyediakan gelongsor dua jari pada komputer Apple adalah seperti berikut: Cari ikon "Tetapan" pada desktop komputer dan klik padanya. Pilih "Pad sentuh" ​​dalam antara muka tetapan, dan kemudian klik "Tatal ke Zum". Semak "Arah tatal: Semulajadi" dalam pilihan zum tatal untuk melengkapkan tetapan. Menyediakan kaedah leret dua jari pada komputer Apple anda adalah mudah. Mula-mula, hidupkan komputer anda dan klik pada ikon Tetapan di bahagian atas skrin. Dalam antara muka tetapan, pilih pilihan "Pad sentuh". Kemudian klik "Zum Tatal" dan pastikan "Arah Tatal" ditandakan

Bagaimana untuk menyediakan WeChat Mac untuk menukar mesej suara kepada teks secara automatik - Bagaimana untuk menyediakan penukaran suara kepada teks Bagaimana untuk menyediakan WeChat Mac untuk menukar mesej suara kepada teks secara automatik - Bagaimana untuk menyediakan penukaran suara kepada teks Mar 19, 2024 am 08:28 AM

Baru-baru ini, beberapa rakan telah berunding dengan editor tentang cara menyediakan WeChat Mac untuk menukar mesej suara kepada teks secara automatik Berikut ialah kaedah untuk menyediakan WeChat Mac untuk menukar mesej suara secara automatik kepada teks. Langkah 1: Mula-mula, buka WeChat versi Mac. Seperti yang ditunjukkan dalam gambar: Langkah 2: Seterusnya, klik "Tetapan". Seperti yang ditunjukkan dalam gambar: Langkah 3: Kemudian, klik "Umum". Seperti yang ditunjukkan dalam gambar: Langkah 4: Kemudian semak pilihan "Tukar mesej suara secara automatik dalam sembang kepada teks". Seperti yang ditunjukkan dalam gambar: Langkah 5: Akhir sekali, tutup tetingkap. Seperti yang ditunjukkan dalam gambar:

Bolehkah Mac memotong fail ke cakera keras? Bolehkah Mac memotong fail ke cakera keras? Feb 20, 2024 pm 01:00 PM

Pengenalan: Artikel ini di sini untuk memperkenalkan anda kepada kandungan yang berkaitan untuk memotong fail ke cakera keras pada Mac Saya harap ia akan membantu anda, mari lihat. Cara Mengeksport Foto ke Pemacu Keras Mudah Alih pada Komputer Mac Anda boleh menggunakan aplikasi Finder atau Photos untuk mengeksport foto ke pemacu keras mudah alih. Apabila menggunakan Finder untuk mengeksport foto, pastikan dahulu pemacu keras mudah alih disambungkan ke Mac dan berjaya dikenali oleh Mac. Langkah-langkah untuk memindahkan foto dari Mac ke pemacu keras adalah mudah: pertama, sambungkan pemacu keras mudah alih ke komputer, dan kemudian buka ikon [Pelancar]. Kemudian, cari dan klik ikon [Foto] dalam tetingkap timbul. Dalam tetingkap [Foto] yang dibuka, tahan kekunci [Shift].

Kaedah but epal hitam Mac? Kaedah but epal hitam Mac? Feb 20, 2024 pm 01:00 PM

Prakata: Artikel ini di sini untuk memperkenalkan anda kepada kandungan yang berkaitan tentang kaedah but epal hitam mac saya harap ia akan membantu anda, mari lihat. Tutorial konfigurasi pantas but Black Apple OC 1. Selepas memasukkan antara muka perisian loverconfigurator, klik pada tetapan "Parameter Boot" Nama volum but lalai ditetapkan kepada nama cakera yang telah dipadamkan semasa memasang sistem Black Apple. 0, kemudian klik Simpan di penjuru kanan sebelah bawah, mulakan semula komputer, dan gantikan antara muka but kekasih dengan antara muka but logo Apple. Secure Boot berkesan menghalang pemuat but yang tidak ditandatangani daripada but dari mana-mana cakera dalaman atau pemacu USB. Walau bagaimanapun, but Clover atau OC tidak menyokong fungsi but selamat. Untuk mula

See all articles