ホームページ Java &#&チュートリアル MAC ユーザー IP を取得するための複数の方法例

MAC ユーザー IP を取得するための複数の方法例

May 05, 2017 pm 02:25 PM

この記事では主にJAVAでユーザーのMACアドレスを取得する方法の様々な例を紹介しますので、必要な方は参考にしてください

JavaでユーザーのMACアドレスを取得する方法:

方法1:ローカルアドレスを結合します。 LAN 内の他のマシンを区別します

/**
  * 根据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;
  }
 }
ログイン後にコピー

方法 2 を見てみましょう:

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;
  }
}
ログイン後にコピー

方法 3、より合理化されたもの:

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;
 }
}
ログイン後にコピー

最後に、トリックを拡大する必要があります、皆さん、注意して見てください

まず第一に、私が言いたいことは次のとおりです。この方法は、外部ネットワーク マシンの MAC アドレスの取得をサポートできます。

以前はLANにのみアクセスできるものを持っていました。 ファイアウォールがある場合はアクセスできませんが、心配する必要はありません。

Baiduの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"));
  }
 }
ログイン後にコピー

【関連推奨事項】

1. Java無料ビデオチュートリアル

2.チュートリアルマニュアル

3.

Javaアノテーションの包括的な分析

以上がMAC ユーザー IP を取得するための複数の方法例の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Macのキーボードでパスワードを入力しても反応がありませんか? Macのキーボードでパスワードを入力しても反応がありませんか? Feb 20, 2024 pm 01:33 PM

はじめに: このウェブサイトでは、Mac のキーボードがパスワードを入力しても反応しないことに関する関連コンテンツを紹介しますので、お役に立てれば幸いです。 Apple Mac システムでパスワードを入力できない問題を解決するにはどうすればよいですか? このキーボードを他のコンピュータに接続して、正常に動作するかどうかを確認することもできます。別のコンピューターでも同じ問題が発生する場合は、キーボード自体に問題がある可能性が高くなります。キーボードを交換するか修理することを検討してください。 Mac コンピュータで初めて Alipay にログインすると、ログイン インターフェイスが表示され、パスワードを入力できません。パスワード入力フィールドには「コントロールをインストールするにはここをクリックしてください」と表示されるため、Alipay ログインにはセキュリティ コントロールのインストールが必要です。セキュリティ制御により、入力した情報 (金額、パスワードなど) を暗号化して保護し、アカウントのセキュリティを向上させることができます。ネクタイ

Mac コンピュータ名、ホスト名、Bonjour 名を簡単にカスタマイズするための 3 つのヒント Mac コンピュータ名、ホスト名、Bonjour 名を簡単にカスタマイズするための 3 つのヒント Mar 06, 2024 pm 12:20 PM

多くの Mac ユーザーはデバイスのデフォルト名をそのまま使用する傾向があり、それを変更することを決して考えないかもしれません。多くの人は、「Johnny's MacBook Air」または単に「iMac」など、初期設定の名前をそのまま使用することを選択します。 Mac の名前を変更する方法を学ぶことは、特に複数のデバイスを持っている場合に、デバイスをすばやく区別して管理するのに役立つため、非常に便利なスキルです。次に、macOS システムでコンピューター名、ホスト名、Bonjour 名 (ローカルホスト名) を変更する方法を段階的に説明します。 Mac 名を変更する必要があるのはなぜですか? Mac の名前を変更すると、あなたの個性が表れるだけでなく、ユーザー エクスペリエンスの向上にも役立ちます。 Mac をカスタマイズする: デフォルトの名前は好みに合わない場合がありますので、お好みの名前に変更してください。

Mac インストーラーのパスワードをお忘れですか? Mac インストーラーのパスワードをお忘れですか? Feb 20, 2024 pm 01:00 PM

はじめに: このウェブサイトでは、Mac インストール プログラムのパスワードを忘れた場合の関連コンテンツをご紹介しますので、お役に立てれば幸いです。 Apple コンピュータ インストール ソフトウェアのパスワードを忘れた場合の対処方法 まず、電話の設定で iCloud を見つけ、クリックして開きます。次に、アカウント番号とパスワードを入力します。ログインボタンの下に、IDまたはパスワードを忘れた場合を促す小さな文字が並んでいますので、これをクリックしてください。通常、ログインインターフェイスで間違ったパスワードを複数回入力すると、MacBook Pro はバインドされた Apple ID を使用してパスワードをリセットするように求めるメッセージを表示します。システムが要求する手順に従うだけで、パスワードのリセットを完了できます。 3. まず Mac をシャットダウンしてから再起動し、電源ボタンを押しながらすぐにキーボードの com を押し続けます。

Macにインストールするpkgファイル? Macにインストールするpkgファイル? Feb 20, 2024 pm 03:21 PM

はじめに: 今日、このサイトでは、Mac への pkg ファイルのインストールに関する関連コンテンツを共有します。現在直面している問題を解決できる場合は、このサイトをフォローして今すぐ開始することを忘れないでください。以前のバージョンの macos pkg をインストールしてオペレーティング システムをアップグレードすることはできません。ラップトップが古いオペレーティング システム バージョンを使用している場合は、最新のオペレーティング システム バージョンにアップグレードすることをお勧めします。古いバージョンでは最新の macOS システムのインストールがサポートされていない可能性があるためです。ディスクユーティリティで「消​​去」を選択し、フォーマットでMacos拡張子を選択し、暗号化オプションをチェックせず、apfsフォーマットを選択せず​​、最後に「消去」ボタンをクリックすると、消去を完了できない問題が解決されます。 macOSのインストール。アプリケーションのアイコンを「App」で始まるファイルにドラッグします。

Apple Mac で入力するときにページをめくるにはどうすればよいですか? Apple Mac で入力するときにページをめくるにはどうすればよいですか? Feb 20, 2024 pm 12:54 PM

はじめに: 今日、このサイトでは、Apple Mac で入力するときにページをめくる方法に関する関連コンテンツを共有します。現在直面している問題が解決できる場合は、このサイトをフォローして今すぐ開始することを忘れないでください。 Apple MacBook ラップトップでタッチパッドを使用するためのヒント Apple コンピュータで 2 本指スライドを設定する手順は次のとおりです: コンピュータのデスクトップで [設定] アイコンを見つけてクリックします。設定インターフェースで「タッチパッド」を選択し、「スクロールしてズーム」をクリックします。スクロールズームオプションの「スクロール方向:ナチュラル」にチェックを入れれば設定完了です。 Apple コンピュータで 2 本指のスワイプ方法を設定するのは簡単です。まず、コンピュータの電源を入れ、画面上部の「設定」アイコンをクリックします。設定インターフェイスで、「タッチパッド」オプションを選択します。次に、「スクロールズーム」をクリックし、「スクロール方向」がチェックされていることを確認します。

音声メッセージを自動的にテキストに変換するように WeChat Mac を設定する方法 - 音声からテキストへの変換を設定する方法 音声メッセージを自動的にテキストに変換するように WeChat Mac を設定する方法 - 音声からテキストへの変換を設定する方法 Mar 19, 2024 am 08:28 AM

最近、一部の友人が、音声メッセージを自動的にテキストに変換するための WeChat Mac の設定方法について編集者に相談しました。以下は、音声メッセージを自動的にテキストに変換するための WeChat Mac の設定方法です。必要な友人は来て、詳細を学ぶことができます。ステップ 1: まず、Mac バージョンの WeChat を開きます。図に示すように: ステップ 2: 次に、「設定」をクリックします。図に示すように: ステップ 3: 次に、「一般」をクリックします。図に示すように: ステップ 4: 次に、「チャットの音声メッセージを自動的にテキストに変換する」オプションをチェックします。図に示すように: ステップ 5: 最後に、ウィンドウを閉じます。図に示すように:

Macはファイルをハードドライブにカットできますか? Macはファイルをハードドライブにカットできますか? Feb 20, 2024 pm 01:00 PM

はじめに: この記事では、Mac でファイルをハードディスクにカットする関連コンテンツを紹介します。 Mac コンピュータで写真をモバイル ハード ドライブにエクスポートする方法 Finder または写真アプリケーションを使用して、写真をモバイル ハード ドライブにエクスポートできます。 Finder を使用して写真をエクスポートする場合は、まずモバイル ハード ドライブが Mac に接続されており、Mac で正常に認識されていることを確認してください。 Mac からハード ドライブに写真を転送する手順は簡単です。まず、モバイル ハード ドライブをコンピュータに接続し、[ランチャー] アイコンを開きます。次に、ポップアップウィンドウで[写真]アイコンを見つけてクリックします。開いた[写真]ウィンドウで[Shift]キーを押したままにします

Macブラックアップルブート方法? Macブラックアップルブート方法? Feb 20, 2024 pm 01:00 PM

前書き: この記事は、Mac ブラックアップルブート方法に関する関連コンテンツを紹介するもので、お役に立てば幸いです。 Black Apple OC ブートのクイック構成チュートリアル 1. Loverconfigurator ソフトウェア インターフェイスに入った後、[Boot Parameters] 設定をクリックします。デフォルトのブート ボリューム名は、Black Apple システムのインストール時に消去されたディスク名に設定されます。しかし、Benjuannai? 0 を選択し、右下隅の [保存] をクリックしてコンピュータを再起動し、ラバー ブート インターフェイスを Apple ロゴ ブート インターフェイスに置き換えます。セキュア ブートは、署名されていないブートローダーが内部ディスクまたは USB ドライブから起動するのを効果的に防ぎます。ただし、Clover または OC ブートはセキュアブート機能をサポートしていません。始めること

See all articles