Java에서 라우터/게이트웨이의 IP를 확인하려면 어떻게 해야 하나요?

Java에서 라우터/게이트웨이의 IP를 확인하려면 어떻게 해야 하나요? IP는 충분히 쉽게 얻을 수 있습니다. 웹사이트의 서비스를 사용하여 인터넷 IP를 얻을 수 있습니다. 하지만 게이트웨이의 IP는 어떻게 확인할 수 있나요?

.NET에서는 방법을 알고 있다면 다소 쉽습니다. 하지만 Java에서는 어떻게 할 수 있을까요?

질문에 대한 의견 (1)

Osx, Linux, Windows 에서 # 39 의 chris Bunch& 등을 사용하여 오토메이티드 훨씬 개선된 수 있습니다.

netstat -rn

'a' 대신 '함장님이요 traceroute

39 의 IP 주소를 너회의 gateway& 나타나게 될 두 번째 필드는 기본 인컨텍스트 시작하는 '선의' 또는 '0.0.0.0'.

이 수를 주위에 사용하려고 하는 문제 '가 traceroute':

  1. traceroute '윈도' 에서 '실제로' O / S, s # 39 트레이스트리아스 도왔으매 there& 코드에서 종속물과의 필요 없습니다.
  2. it& # 39 의 빠른 명령을 실행할 수 있습니다 - O / S 네트워크를 통해 얻은 정보를 얻는 것이 아니라 traceroute '네트워크' 에 의해 종종 차단되었음을 3.

그러나 유지하는 데 필요한 것이 유일한 될 때까지 '에서 발견된 이후, 오른쪽 라인 출력입니다 흐름선 판독값 netstat' ll be there& # 39, 두 개 이상의 행을 출력입니다.

  • EDIT: 기본값입니다 Gateway& s # 39, & # 39 로 시작하는 두 번째 필드는 IP 주소는 nnn. 선의 default& # 39;; mac (거친 Lion) 을 사용하는 경우, 또는 # 39, & # 39 로 시작하는 3 선의 필드 * 0.0.0.0&. (Windows 7 에서 테스트되었습니다.)

Windows: &gt. &gt. 네트워크 대상 네트마스크 게이트웨이형 인터페이스입니다 메트릭은

&gt. &gt. 0.0.0.0 0.0.0.0 192.168.2.254 192.168.2.46 10

Mac. &gt. &gt. Refs 네이프 만료시킬 게이트웨이형 플래그를 사용하여 대상

&gt. &gt. 기본 192.168.2.254 우스 en1 104 4

해설 (0)
해결책

39 로, 이 같은 다른 언어에서는 죄송합니다. jave doesn& 유쾌한 할 수 없다. # 39, here& s what I did.

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

public class ExecTest {
    public static void main(String[] args) throws IOException {
        Process result = Runtime.getRuntime().exec("traceroute -m 1 www.amazon.com");

        BufferedReader output = new BufferedReader(new InputStreamReader(result.getInputStream()));
        String thisLine = output.readLine();
        StringTokenizer st = new StringTokenizer(thisLine);
        st.nextToken();
        String gateway = st.nextToken();
        System.out.printf("The gateway is %s\n", gateway);
    }
}

이 두 번째로 토큰인지 가정합니다 게이트웨이에는 아니라 3 위를 차지했다. 이 경우 추가 '스트롬네스토켄 추가해야 합니다 (),' 한 번 더 발전시키는 데 토크니저 별색.

해설 (2)
try{
    Process result = Runtime.getRuntime().exec("netstat -rn");

    BufferedReader output = new BufferedReader(new InputStreamReader(result.getInputStream()));

    String line = output.readLine();
    while(line != null){
        if ( line.startsWith("default") == true )
            break;      
        line = output.readLine();
    }

    StringTokenizer st = new StringTokenizer( line );
    st.nextToken();
    gateway = st.nextToken();
    st.nextToken();
    st.nextToken();
    st.nextToken();
    adapter = st.nextToken();

} catch( Exception e ) { 
    System.out.println( e.toString() );
    gateway = new String();
    adapter = new String();
}
해설 (1)

구문 분석 결과를 얻을 수 있습니다, windows 에서 IPConfig 기본값입니다 게이트웨이형 기다리지 않고 추적.

해설 (0)

netstat - 로케일에 출력입니다 rn 은 특정. 내 시스템에 (로케일에 = de) 출력물에는 같습니다. . 스탠다드게이트웨이: 10.22.0.1

39, & # 39, default& 그러하매 로 시작하는 줄 수 없다.

netstat 권능은하나님께 사용 할 수 없어 너무 좋습니다.

해설 (1)

이 문제를 해결하기 위해 함께 언급한 traceroute (wide area icmp 기반 hit) 고려해보십시오 수 있습니다.

  1. traceroute 데이터베이스에구성원을 공공 IP (광역 피하는 것, 그래도 ICMP)
  2. Ipconfig / 같은 유틸리티를 사용하여 icmp 비사양 ifconfig (포터블식 이 문제가 있지만).
  3. 지금은 어떤 것이 최고의 그리고 가장 이동형이든지 솔루션이므로 &amp 쉘로 것으로 보인다. netstat 구문 분석 (자세한 내용은 코드 예제 [here] [1])

[1]: http://forums.sun.com/thread.jspa = 5289135 트레이디드?

해설 (0)

첫 번째 홉 라우터가 아닌 공용 IP 주소를 확인할 수 있는 checkmyip.org와 같은 사이트를 사용하는 것이 더 나을 수 있습니다: 유니에서는 '실제' IP 주소가 있는 반면, 집에서는 로컬 라우터의 공용 IP 주소입니다.

반환되는 페이지를 파싱하거나 IP 주소만 문자열로 반환할 수 있는 다른 사이트를 찾을 수 있습니다.

(이 URL을 Java 등으로 로드한 다음 필요한 정보를 가져온다는 의미입니다).

이것은 플랫폼에 완전히 독립적이어야 합니다.

해설 (0)

이에 대해 UPnP: 일부 라우터 지원부에서는 점을 유념하십시오 UPnP. 만약 그렇게 한다면 끌 수 있다면 (보안상 이유로). 그래서 항상 최적의 솔루션을 사용할 수 없습니다.

또한 너태프mp 보라고 합니다.

간단한 library for UPnP usb. http://miniupnp.free.fr/ # 39 의 C. 표시되어도 it&.

해설 (0)

이 버전은, 정규 표현식 검색 사이트 (www.whatismyip.com) 를 통해 판독합니다 접속되므로 컨텐트에서 및 ip 주소 및 유인물 迈向 cmd. 그 코드를 조금 모셰엘리사스 개선

import java.io.BufferedReader;  
import java.io.IOException;  
import java.io.InputStreamReader; 
import java.net.URL;  
import java.util.regex.Matcher;  
import java.util.regex.Pattern;  

public class Main {

    public static void main(String[] args) {
        BufferedReader buffer = null;
        try {
            URL url = new URL(
                    "http://www.whatismyip.com/tools/ip-address-lookup.asp");
            InputStreamReader in = new InputStreamReader(url.openStream());
            buffer = new BufferedReader(in);
            String line = buffer.readLine();
            Pattern pattern = Pattern
                    .compile("(.*)value=\"(\\d+).(\\d+).(\\d+).(\\d+)\"(.*)");
            Matcher matcher;
            while (line != null) {
                matcher = pattern.matcher(line);
                if (matcher.matches()) {
                    line = matcher.group(2) + "." + matcher.group(3) + "."
                            + matcher.group(4) + "." + matcher.group(5);
                    System.out.println(line);
                }
                line = buffer.readLine();
            }
        } catch (IOException e) {
            e.printStackTrace();

        } finally {
            try {
                if (buffer != null) {
                    buffer.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}

import java.io.BufferedReader;  
import java.io.IOException;  
import java.io.InputStreamReader; 
import java.net.URL;  
import java.util.regex.Matcher;  
import java.util.regex.Pattern;  

public class Main {

    public static void main(String[] args) {
        BufferedReader buffer = null;
        try {
            URL url = new URL(
                    "http://www.whatismyip.com/tools/ip-address-lookup.asp");
            InputStreamReader in = new InputStreamReader(url.openStream());
            buffer = new BufferedReader(in);
            String line = buffer.readLine();
            Pattern pattern = Pattern
                    .compile("(.*)value=\"(\\d+).(\\d+).(\\d+).(\\d+)\"(.*)");
            Matcher matcher;
            while (line != null) {
                matcher = pattern.matcher(line);
                if (matcher.matches()) {
                    line = matcher.group(2) + "." + matcher.group(3) + "."
                            + matcher.group(4) + "." + matcher.group(5);
                    System.out.println(line);
                }
                line = buffer.readLine();
            }
        } catch (IOException e) {
            e.printStackTrace();

        } finally {
            try {
                if (buffer != null) {
                    buffer.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}
해설 (0)

말처럼 쉽지 않습니다. Java는 플랫폼에 독립적이기 때문에 Java에서 수행하는 방법을 잘 모르겠습니다. .NET이 일부 웹 사이트에 연락하여 다시보고하는 것으로 추측 하고 있습니다. 몇 가지 방법이 있습니다. 첫째, ICMP 프로토콜을 자세히 살펴보면 필요한 정보를 얻을 수 있습니다. 경유하는 IP(경로)를 추적할 수도 있습니다. 다음 범위에 속하지 않는 IP를 발견하면 다음과 같이 하세요:

  • 10.0.0.0 - 10.255.255.255
  • 172.16.0.0 - 172.31.255.255
  • 192.168.0.0 - 192.168.255.255

귀하의 IP에서 한 홉 떨어진 IP이며, 아마도 귀하의 IP와 몇 옥텟의 정보를 공유할 것입니다.

행운을 빕니다. 이 질문에 대한 확실한 답변을 듣고 싶습니다.

해설 (0)

추적 경로가 있는 경우 셸을 사용해 보세요.

'traceroute -m 1 www.amazon.com'은 다음과 같은 내용을 출력합니다:

traceroute to www.amazon.com (72.21.203.1), 1 hops max, 40 byte packets
 1  10.0.1.1 (10.0.1.1)  0.694 ms  0.445 ms  0.398 ms

두 번째 줄을 파싱합니다. 예, 추악하지만 누군가가 더 멋진 것을 게시할 때까지 버틸 수 있습니다.

해설 (0)

매슈: 예, 그게 제가 무엇을 의미하는지 &quot 갈 수 없어 내 인터넷 서비스를 사용하는 IP 를 website."; 정말 미안하다 기술입니까 얘기다.

Brian/Nick: 이러한 사실을 제외한 traceroute 내린다 라우터 %s/dbase/ext_table. ICMP 중지되 카타시안 항상 많은 곳.

Traceroute 및 uPnP 함께 사용할 수 있다고 생각한다 "고 말했다. 즉, 난 그냥 무언가 빠진 것으로 기대하고 있었는데 내가 하려는 것은 불 보듯 뻔한 일이다.

흥분됐나요 모두라뇨 입력할 수 있기 때문에, 이 말은 아무것도 I& # 39 m not 누각되었습니다 명백하네. 난 구현을 위해 일부 비트를 발견하십시오 게이트웨이에는 uPnP 시작했습니다.

해설 (0)

Url http://whatismyip.com/automation/n09230945.asp&quot, &quot, 쿼리하지 수 있습니다. 예를 들면 다음과 같습니다.

    BufferedReader buffer = null;
    try {
        URL url = new URL("http://whatismyip.com/automation/n09230945.asp");
        InputStreamReader in = new InputStreamReader(url.openStream());
        buffer = new BufferedReader(in);

        String line = buffer.readLine();
        System.out.println(line);
    } catch (IOException e) {
        e.printStackTrace();
    } finally {
        try {
            if (buffer != null) {
                buffer.close();
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
해설 (0)

Windows 에서 그냥 다음 명령을 사용할 수 있습니다.

ipconfig | findstr /i "Gateway"

어떤 부여하느뇨 너회가 출력입니다 다음과 같습니다.

Default Gateway . . . . . . . . . : 192.168.2.1
Default Gateway . . . . . . . . . : ::

그러나, 이 명령을 실행할 때, 나는 이제 내가 can& # 39 는 Java 와 함께 게시물로의 분명 이 초과됩니다.

해설 (0)

Netstat 명령을 사용할 수 있습니다 '-' 에서 Windows, Linux 등 rn OSX 에서 사용할 수 있는 플랫폼. 이것은 내 코드:

private String getDefaultAddress() {
        String defaultAddress = "";
        try {
            Process result = Runtime.getRuntime().exec("netstat -rn");

            BufferedReader output = new BufferedReader(new InputStreamReader(
                    result.getInputStream()));

            String line = output.readLine();
            while (line != null) {
                if (line.contains("0.0.0.0")) {

                    StringTokenizer stringTokenizer = new StringTokenizer(line);
                    stringTokenizer.nextElement(); // first element is 0.0.0.0
                    stringTokenizer.nextElement(); // second element is 0.0.0.0
                    defaultAddress = (String) stringTokenizer.nextElement();
                    break;
                }

                line = output.readLine();

            } // while
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

        return defaultAddress;

} // getDefaultAddress
해설 (0)

39 m 확신하지 못하고 있지만, 모든 시스템에 작동하잖아 i& 경우 적어도 나는 여기서 결과 이:

import java.net.InetAddress;
import java.net.UnknownHostException;
public class Main
{
    public static void main(String[] args)
    {
        try
        {
            //Variables to find out the Default Gateway IP(s)
            String canonicalHostName = InetAddress.getLocalHost().getCanonicalHostName();
            String hostName = InetAddress.getLocalHost().getHostName();

            //"subtract" the hostName from the canonicalHostName, +1 due to the "." in there
            String defaultGatewayLeftover = canonicalHostName.substring(hostName.length() + 1);

            //Info printouts
            System.out.println("Info:\nCanonical Host Name: " + canonicalHostName + "\nHost Name: " + hostName + "\nDefault Gateway Leftover: " + defaultGatewayLeftover + "\n");
            System.out.println("Default Gateway Addresses:\n" + printAddresses(InetAddress.getAllByName(defaultGatewayLeftover)));
        } catch (UnknownHostException e)
        {
            e.printStackTrace();
        }
    }
    //simple combined string out of the address array
    private static String printAddresses(InetAddress[] allByName)
    {
        if (allByName.length == 0)
        {
            return "";
        } else
        {
            String str = "";
            int i = 0;
            while (i < allByName.length - 1)
            {
                str += allByName[i] + "\n";
                i++;
            }
            return str + allByName[i];
        }
    }
}

이 가져다줄래요 생산한다.

Info:
Canonical Host Name: PCK4D-PC.speedport.ip
Host Name: PCK4D-PC
Default Gateway Leftover: speedport.ip

Default Gateway Addresses:
speedport.ip/192.168.2.1
speedport.ip/fe80:0:0:0:0:0:0:1%12

39 i& 추가 조사가 필요한 다른 시스템의 경우, d / 구성 / pc 게이트웨이형 셋업을 무시하려면 작동하잖아 변경됩니다. 하지만 그런 의심을 내가 찾은 것은 처음이다.

해설 (0)