Frank Krueger
그는 물었다 12년 전
15

내 러우터 / 게이트웨이형 자바 가상 머신 (jvm) 에 ip 를 파악할 수 있습니까?

내 러우터 / 게이트웨이형 자바 가상 머신 (jvm) 에 ip 를 파악할 수 있습니까? 쉽게 갈 수 없어 내 IP 부족합니다. I can get my 인터넷 IP 서비스를 사용하는 인터넷 사이트에. 하지만, 내 gateway& # 39 의 IP 파악할 수 있습니까?

Net 에서는 다소 쉽게 이 됨을 알고 있다면. 그러나 자바 가상 머신 (jvm) 에 어떻게 하는거지?

Tall Jeff
그는 12년 전 댓글을 달았습니다
4

실제로 너회의 게이트웨이형 / 러우터 (최소한) 는 두 개의 IP 주소가. 찾으십니까 평면가공 너회의 노드입니다 또는 다른 한 쪽으로 평면가공 업스트림으로 %hsmb 다른 네트워크?

답변 16 개

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

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 위를 차지했다. 이 경우 추가 '스트롬네스토켄 추가해야 합니다 (),' 한 번 더 발전시키는 데 토크니저 별색.

Martijn Courteaux
그는 11년 전 댓글을 달았습니다
4
  • 1: # 39 이 doesn& 비-windows os 를 사용할 수 없다.
Thorbjørn Ravn Andersen
그는 10년 전 댓글을 달았습니다
5

이 때문에 실제로 doesn& # 39 의 traceroute 호출됨 tracert 저기예요 windows os 빗나갔다.

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();
}

gtgaxiola
Alex Abdugafarov
그는 5년 전 댓글을 달았습니다
0

또한 '대신' 기본 '선' 0.0.0.0 부터 시작합니다.

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

이 버전은, 정규 표현식 검색 사이트 (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();
            }
        }
    }
}

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

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

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

Alnitak
그는 11년 전 댓글을 달았습니다
0

어떤 OS 에로남이네? # 39 에 OSX 의 차이가 없는 there& 로케일에 출력입니다.

이 문제를 해결하기 위해 함께 언급한 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 트레이디드?

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

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

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

뭔가 좋은 성과를 거둘 수 있을 수 있습니다 (checkmyip.org) 를 사용하여 오프하도록 같은 ip 주소 - 당신의 첫 홉 라우터를 당신의 공적인 결정하는 것은 아니다. i have a &quot http://support. 유니 real"; 반면, 그것은 나의 로컬 ip 주소를 집에서 router& # 39 의 공공 IP 주소입니다.

다른 사이트에 있는 페이지를 찾을 수 있는 되돌려줍니다 파싱할 수 있습니다, 또는 그냥 내려받습니다 뒤로를 IP 주소를 유일한 구체화하십시오.

(I& # 39, m 마무리라뇨 로드형 자바 가상 머신 (jvm) 에 필요한 정보, 이 URL / 있는모든 그리곤요 내려받습니다).

완전 플랫폼 비종속 되어야 합니다.

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

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

ipconfig | findstr /i "Gateway"

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

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

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

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();
        }
    }

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

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

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

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

Traceroute 디스테이징할 경우 포격으로 시도하시겠습니까 할꺼이나.

& # 39, & # 39 m, traceroute - 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

두 번째 할말이다 구문 분석 # 39 의 it& # 39, ll get it& 그러하너라 있지만, 그 때까지 누군가가 포스트를 얼른 좀 괜찮게.

말처럼 쉬운 않은 듯 합니다. 그래서 저는 java 플랫폼 독립적인 자바 가상 머신 (jvm) 에 어떻게 해야 잘 모르겠습니다. 실로나는 못하고 있는 일부 perezhilton. 보고하는 .NET 연락처 다시. 갈 길이 몇 가지가 있습니다. 첫째, a deeper look into the ICMP 프로토콜을 필요한 정보를 얻을 수 있습니다. 또한 IP 추적을 통해 you go (해당 라우트를). Ip 않는 발생할 경우 다음 범위:

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

당신의 IP 한 홉 (hop) 떨어진 것은, 아마 몇 옥텟 에서 정보의 공유를 통해 ip.

Best of 운빨이야. # 39 이 질문의 답을 듣고 호기심, 정해진 i& 될 겁니다.

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 게이트웨이형 셋업을 무시하려면 작동하잖아 변경됩니다. 하지만 그런 의심을 내가 찾은 것은 처음이다.