Wi-Fi 접속시의 IP 주소를 Java로 취득하고 싶다

13394 단어 IP 주소자바Wi-Fi

먼저 해본 것



InetAddress.getLocalHost()를 사용해보기



  우선 구그라고 보면 이쪽의 페이지가 나왔습니다.
h tp // w w. 유군.いんふぉ/bぉg/2008/10/じゃゔぁ이니타드 d레스-게 tぉ카 l호 st. HTML

마루코피하고 그대로 달리게 해 본 결과입니다. 아무래도 눈에 띄지 않는 IP 주소가 출력되었습니다.


목을 기울이면 명령 프롬프트를 시작 ipconfig.


"누구야 너는 어!"

다른 환경에서 어떻게 될지는 모르겠지만, 적어도 이 머신에서는 InetAddress.getLocalHost()를 사용해도 Wi-Fi의 IP는 취득할 수 없는 것을 알았습니다. 계속해서 안드로이드의 기사 밖에 히트하지 않기 때문에, 고리 눌러도 무엇이든 다른 방법을 생각하지 않으면 안되는 것 같습니다.

Windows OS 명령 ipconfig를 Java로 사용해보기



커맨드 프롬프트에서 볼 수 있기 때문에 이것을 Java 측에서 혼란스러워 버리지 말라, 라고 생각 붙어 시험해 보는 것에.
C언어로 말하는 System()가 Java에도 있을 것이다라고 구구 해 보았습니다.

htp // d. 하테나. 네. jp/타카미_히로키/20101221/p1

이를 베이스로, OS 커멘드 ipconfig에 의한 출력을 취득해 표시하면…


네, 그렇습니다. 일본어 버전 Windows 명령 프롬프트에서 사용되는 문자 코드는 Shift-JIS입니다. 출력이나 취득 후의 캐릭터 라인을 UTF-8로 할 수 없는지 끈질겨 보았습니다만, 제가 잡어이기 때문인지 아니면 사양인지 실현하지는 않았습니다.

<추기>
@ 키치로씨로부터 코멘트란에서 조언을 받았습니다. 취득한 실행 결과는 임의의 문자 코드로 캐릭터 라인에 할 수 있는 것 같습니다. 여기에서 아래의 기사는 읽어 날려 코멘트란을 봐 주세요. 내가 보낸 4일간은 뭐였는지…

원 쿠션 놓아 보자



조사해 가는 동안 「Shift-JIS로 쓰여진 텍스트 파일은 읽을 수 있다」가 판명되었습니다.
「ipconfig > ip.txt」를 실행해 생성된 텍스트 파일을 사용하면 됩니다. 흐름으로는

  ipconfig > ip.txt
  ↓
   문자 코드를 Shift-JIS로 지정하여 ip.txt 로드
  ↓
  indexOf()와 split()을 사용하여 검색
  ↓
   낯선 얼굴로 ip.txt 삭제

같은 곳입니까?

함정



여기서 주의할 필요가 있는 것은, OS 커멘드를 두드리는 본체측과 두드려 결과를 돌려주는 내보내기측이 병렬 처리가 되는 점입니다. 내보내기 측의 프로세스가 끝나기를 기다리지 않고 읽기에 들어가면 당연히 IOException 선생님이 와 버립니다.

샘플



Main.java

public class Main {
    public static void main(String[] args) {
        System.out.println(new getWiFiIP().get());
    }
}


getWiFiIP.java

import java.io.File;
import java.io.IOException;
import java.util.ArrayList;


public class getWiFiIP {

    private String ip="";

    public String get(){
        return ip;
    }


    public getWiFiIP() {

        try {

            ProcessBuilder pb=new ProcessBuilder("cmd.exe", "/c", "ipconfig",">","ip.txt");

            Process process = pb.start();   //プロセスの開始
            process.waitFor();              //書き出しが終わるまで待機

            ArrayList<String> list=new Text_read("ip.txt").getText(); //テキストファイル読み込み


            int cnt=list.indexOf("Wireless LAN adapter Wi-Fi:");////////////////////////////////////////////////
            for(;;){
                if(list.get(cnt).indexOf("IPv4")==-1){
                    cnt++;
                }else{
                    break;
                }                                 //読み込んで取得した文字列群からWi-Fi接続のIPアドレス(IPv4)を検索する
            }////////////////////////////////////////////////////////////////////////////////////////////////////


            String[] temp=list.get(cnt).split(":"); //「IPv4 アドレス . . . . . . . . . . . .: ×××.×××.×××.×××」となっているので分割する
            ip= temp[1];                            //取得したIPアドレスを代入

            new File("ip.txt").delete();            //しれっとip.txtを削除

       ////////////////////////////////////////////////////以下エラー処理
        } catch (IOException e) {
            e.printStackTrace();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

        if(ip.equals(""))ip= "取得に失敗しました";
    }
}



Text_read.java


import java.io.*;
import java.util.ArrayList;

/////////////////////////////////////////////////////////
//テキストファイルを丸ごと読み込みArrayListへ格納する。//
/////////////////////////////////////////////////////////


public class Text_read {

    private ArrayList<String>text=new ArrayList<String>();      //格納用ArrayList

    public Text_read(String path/*ファイルパス*/){

        try {
            BufferedReader br =new BufferedReader(new InputStreamReader(new FileInputStream(path), "Shift_JIS"));
            for(;;){
                text.add(br.readLine());
                if(text.get(text.size()-1)==null){              
                    text.remove(text.size()-1);                 
                    break;
                }
            }
            br.close();
        }catch(IOException e){
            System.out.println("入出力エラー");
        }
    }

    public ArrayList<String> getText(){
        return text;                                            
    }

}



이것으로 우선 해결은 했습니다만, 보다 간단한 방법을 알고 있는 분이 있으면 가르쳐 주세요…

<추기>
@ 키치로 씨 감사합니다.

좋은 웹페이지 즐겨찾기