Как я могу определить IP своего маршрутизатора/шлюза в Java?

Вам не требуется ViewResolver. pom.xml нуждается в указанных зависимостях, как сказал Юра, и поместите файлы jsp в src \ main \ webapp \ WEB-INF \ jsp.

15
задан liut0 9 July 2014 в 06:09
поделиться

12 ответов

Java не делает это столь же приятным как другие языки, к сожалению. Вот то, что я сделал:

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

Это предполагает, что шлюз является вторым маркером а не третьим. Если это, необходимо добавить дополнительное st.nextToken(); для усовершенствования токенизатора еще одно пятно.

10
ответ дан 1 December 2019 в 00:08
поделиться

Можно запросить 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();
        }
    }
1
ответ дан 1 December 2019 в 00:08
поделиться

Испытайте окружение к traceroute, если у Вас есть он.

'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

Синтаксический анализ вторая строка. Да, это ужасно, но это получит Вас идущий, пока кто-то не отправит что-то более хорошее.

1
ответ дан 1 December 2019 в 00:08
поделиться

Преодолеть проблемы упомянуло с traceroute (основанный на ICMP, широкий хит области), Вы могли рассмотреть:

  1. traceroute к Вашему общедоступному IP (избегает глобального хита, но все еще ICMP)
  2. Использование утилита не-ICMP как ifconfig/ipconfig (проблемы мобильности с этим, хотя).
  3. , Что кажется, лучшее и большая часть портативного решения на данный момент должны окружить & проанализируйте netstat (см. пример кода здесь )
2
ответ дан 1 December 2019 в 00:08
поделиться

Это не столь легко, как это звучит. 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.

Всего наилучшего. Мне будет любопытно услышать категорический ответ на этот вопрос.

1
ответ дан 1 December 2019 в 00:08
поделиться

Matthew: Да, под именно это я подразумевал, "Я могу получить свой интернет-IP с помощью сервиса на веб-сайт". Извините за то, чтобы быть бойким.

Brian/Nick: Traceroute был бы прекрасен за исключением того, что большому количеству этих маршрутизаторов отключили ICMP, и таким образом он всегда останавливается.

я думаю, комбинация traceroute и uPnP удастся. Именно это я был планированием выполнения, я как просто надежда, что я пропускал что-то очевидное.

Благодарят Вас все за Ваши комментарии, таким образом, это кажется, что я не пропускаю ничего очевидного. Я начал реализовывать некоторые биты uPnP для обнаружения шлюза.

1
ответ дан 1 December 2019 в 00:08
поделиться

Относительно UPnP: знайте, что не все маршрутизаторы поддерживают UPnP. И если они делают это могло бы быть выключено (из соображений безопасности). Таким образом, Ваше решение не могло бы всегда работать.

необходимо также взглянуть на NatPMP.

А простая библиотека для UPnP может быть найдена в http://miniupnp.free.fr/ , хотя это находится в C...

2
ответ дан 1 December 2019 в 00:08
поделиться

Можно быть более обеспеченным использованием чего-то как checkmyip.org, который определит общедоступный IP-адрес - не обязательно первый маршрутизатор транзитного участка: в Uni у меня есть "реальный" IP-адрес, тогда как дома это - общедоступный IP-адрес моего локального маршрутизатора.

можно проанализировать страницу, которая возвращается, или найдите другой сайт, который позволяет Вам просто возвращать IP-адрес как единственную строку.

(я имею в виду, загружают этот URL в Java/независимо от того, что и затем получают информацию, в которой Вы нуждаетесь).

Это должно быть полностью независимо от платформы.

2
ответ дан 1 December 2019 в 00:08
поделиться

На окнах, анализирующих вывод IPConfig, получит Вас шлюз по умолчанию, не ожидая трассировки.

3
ответ дан 1 December 2019 в 00:08
поделиться
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();
}
4
ответ дан 1 December 2019 в 00:08
поделиться

В Windows, OSX, Linux, и т.д. затем ответ Chris Bunch может быть очень улучшен при помощи [1 117]

netstat -rn

вместо traceroute команда.

IP-адрес Вашего шлюза появится во втором поле строки, которая запускается или default или 0.0.0.0.

Это обходит много проблем с попыткой использовать traceroute:

  1. в Windows traceroute на самом деле tracert.exe, таким образом, нет никакой потребности в зависимостях O/S в коде
  2. , это - быстрая команда для выполнения - он получает информацию от O/S, не из сети
  3. traceroute иногда блокируется сетью

, единственный недостаток - то, что будет необходимо продолжать читать строки из эти netstat вывод, пока правильная строка не будет найдена, так как будет больше чем одна строка вывода.

РЕДАКТИРОВАНИЕ: IP-адрес Шлюза По умолчанию находится во втором поле строки, которая запускается со 'значения по умолчанию', если Вы находитесь на MAC (протестированы на Льве), или в третье поле строки, которая запускается с '0.0.0.0' (протестированный в Windows 7)

Windows:

Сетевая Целевая Метрика Интерфейса Шлюза Сетевой маски

0.0.0.0 0.0.0.0 192.168.2.254 192.168.2.46 10

Mac:

Использование Судей Флагов Целевого шлюза Netif Истекают

значение по умолчанию 192.168.2.254 UGSc 104 4 en1

23
ответ дан 1 December 2019 в 00:08
поделиться

вывод команды netstat -rn зависит от региона. в моей системе (locale = de) вывод выглядит так: ... Standardgateway: 10.22.0.1

, поэтому нет строки, начинающейся с 'default'.

, поэтому использование netstat может оказаться не очень хорошей идеей.

2
ответ дан 1 December 2019 в 00:08
поделиться
Другие вопросы по тегам:

Похожие вопросы: