マイペースなプログラミング日記

DTMやプログラミングにお熱なd-kamiがマイペースに書くブログ

自分のIPアドレスを取得する

3G回線で繋がっている状態でServerSocket開いて、getInetAddress()したらアドレスが0.0.0.0となっていた。困ったのでInetAddressのgetLocalHost()でアドレス取得したら127.0.0.1となっていた。なので今度はNetworkInterfaceのgetNetworkInterfaces()経由で取得して、127.0.0.1と0.0.0.0以外のアドレスを取得するようにしたらうまくいった。以下がそのソースコード。アドレスが見つからなかったら127.0.0.1を返すようにしている。

private static String getIPAddress() throws IOException{
    Enumeration<NetworkInterface> interfaces = NetworkInterface.getNetworkInterfaces();
        
    while(interfaces.hasMoreElements()){
        NetworkInterface network = interfaces.nextElement();
        Enumeration<InetAddress> addresses = network.getInetAddresses();
            
        while(addresses.hasMoreElements()){
            String address = addresses.nextElement().getHostAddress();
                
            //127.0.0.1と0.0.0.0以外のアドレスが見つかったらそれを返す
            if(!"127.0.0.1".equals(address) && !"0.0.0.0".equals(address)){
                return address;
            }
        }
    }
        
    return "127.0.0.1";
}