Java에서 라우터/게이트웨이의 IP를 확인하려면 어떻게 해야 하나요? IP는 충분히 쉽게 얻을 수 있습니다. 웹사이트의 서비스를 사용하여 인터넷 IP를 얻을 수 있습니다. 하지만 게이트웨이의 IP는 어떻게 확인할 수 있나요?
.NET에서는 방법을 알고 있다면 다소 쉽습니다. 하지만 Java에서는 어떻게 할 수 있을까요?
Osx, Linux, Windows 에서 # 39 의 chris Bunch& 등을 사용하여 오토메이티드 훨씬 개선된 수 있습니다.
netstat -rn
'a' 대신 '함장님이요 traceroute
이 수를 주위에 사용하려고 하는 문제 '가 traceroute':
그러나 유지하는 데 필요한 것이 유일한 될 때까지 '에서 발견된 이후, 오른쪽 라인 출력입니다 흐름선 판독값 netstat' ll be there& # 39, 두 개 이상의 행을 출력입니다.
Windows: >. >. 네트워크 대상 네트마스크 게이트웨이형 인터페이스입니다 메트릭은
>. >. 0.0.0.0 0.0.0.0 192.168.2.254 192.168.2.46 10
Mac. >. >. Refs 네이프 만료시킬 게이트웨이형 플래그를 사용하여 대상
>. >. 기본 192.168.2.254 우스 en1 104 4
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 위를 차지했다. 이 경우 추가 '스트롬네스토켄 추가해야 합니다 (),' 한 번 더 발전시키는 데 토크니저 별색.
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();
}
이 문제를 해결하기 위해 함께 언급한 traceroute (wide area icmp 기반 hit) 고려해보십시오 수 있습니다.
[1]: http://forums.sun.com/thread.jspa = 5289135 트레이디드?
첫 번째 홉 라우터가 아닌 공용 IP 주소를 확인할 수 있는 checkmyip.org와 같은 사이트를 사용하는 것이 더 나을 수 있습니다: 유니에서는 '실제' IP 주소가 있는 반면, 집에서는 로컬 라우터의 공용 IP 주소입니다.
반환되는 페이지를 파싱하거나 IP 주소만 문자열로 반환할 수 있는 다른 사이트를 찾을 수 있습니다.
(이 URL을 Java 등으로 로드한 다음 필요한 정보를 가져온다는 의미입니다).
이것은 플랫폼에 완전히 독립적이어야 합니다.
이에 대해 UPnP: 일부 라우터 지원부에서는 점을 유념하십시오 UPnP. 만약 그렇게 한다면 끌 수 있다면 (보안상 이유로). 그래서 항상 최적의 솔루션을 사용할 수 없습니다.
또한 너태프mp 보라고 합니다.
간단한 library for UPnP usb. http://miniupnp.free.fr/ # 39 의 C. 표시되어도 it&.
이 버전은, 정규 표현식 검색 사이트 (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();
}
}
}
}
말처럼 쉽지 않습니다. Java는 플랫폼에 독립적이기 때문에 Java에서 수행하는 방법을 잘 모르겠습니다. .NET이 일부 웹 사이트에 연락하여 다시보고하는 것으로 추측 하고 있습니다. 몇 가지 방법이 있습니다. 첫째, ICMP 프로토콜을 자세히 살펴보면 필요한 정보를 얻을 수 있습니다. 경유하는 IP(경로)를 추적할 수도 있습니다. 다음 범위에 속하지 않는 IP를 발견하면 다음과 같이 하세요:
귀하의 IP에서 한 홉 떨어진 IP이며, 아마도 귀하의 IP와 몇 옥텟의 정보를 공유할 것입니다.
행운을 빕니다. 이 질문에 대한 확실한 답변을 듣고 싶습니다.
추적 경로가 있는 경우 셸을 사용해 보세요.
'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
두 번째 줄을 파싱합니다. 예, 추악하지만 누군가가 더 멋진 것을 게시할 때까지 버틸 수 있습니다.
매슈: 예, 그게 제가 무엇을 의미하는지 " 갈 수 없어 내 인터넷 서비스를 사용하는 IP 를 website."; 정말 미안하다 기술입니까 얘기다.
Brian/Nick: 이러한 사실을 제외한 traceroute 내린다 라우터 %s/dbase/ext_table. ICMP 중지되 카타시안 항상 많은 곳.
Traceroute 및 uPnP 함께 사용할 수 있다고 생각한다 "고 말했다. 즉, 난 그냥 무언가 빠진 것으로 기대하고 있었는데 내가 하려는 것은 불 보듯 뻔한 일이다.
흥분됐나요 모두라뇨 입력할 수 있기 때문에, 이 말은 아무것도 I& # 39 m not 누각되었습니다 명백하네. 난 구현을 위해 일부 비트를 발견하십시오 게이트웨이에는 uPnP 시작했습니다.
Url http://whatismyip.com/automation/n09230945.asp", ", 쿼리하지 수 있습니다. 예를 들면 다음과 같습니다.
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();
}
}
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
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