| Цитата | | это всё интересно а посредством java такого сделать нельзя? |
Чисто средствами нельзя. Надо опрашивать какой-нибудь сервер: Вот примерный код, как это делать:
| Код | public static String tryResolveMyExternalIPAddress() { String contents = ""; HttpURLConnection c = null; BufferedReader in = null; try { // Вызываешь testip.php, который должен создать страничку с твоим // внешним адресом средствами языка PHP. URL u = new java.net.URL("http://www.some-aadress/testip.php"); c = (HttpURLConnection) u.openConnection(); c.setDefaultUseCaches(false); c.setUseCaches(false); c.connect();
if (c.getResponseCode() != HttpURLConnection.HTTP_OK) { System.out.println(c.getResponseMessage()); return ""; }
//Закачиваешь сгенерированную страничку. in = new BufferedReader(new InputStreamReader(c.getInputStream()));
StringBuffer str = new StringBuffer(); String line; while ((line = in.readLine()) != null) { str.append(line); } contents = str.toString();
} catch (Exception e) { e.printStackTrace(); return ""; } finally { if (in != null) { try { in.close(); } catch (Exception ign) {} } if (c != null) { c.disconnect(); } } // Вытаскиваешь из полученной странички твой внешний АйПи. return parseHTMLResults(contents); }
| Добавлено @ 14:57 | Цитата | | Если ты подклучен через роутер, у тебя нету внешнего IP, только внутренний |
Нет, в любом случае внешний АйПи имеется, просто он такой как и остальных узлов локалки. А роутер просто делает перенаправление входного трафика на необходимый локальный адрес... Добавлено @ 15:00 | Цитата | | Возможно, это можно как-то сделать через командную строку... Ведь есть же команда, которая выдает все пройденные пакетом IP. А потом отпарсить. Но это, конечно, изврат. |
Можно и через командную строку, но тут тогда будет осуществляться привязка к типу операционной системы, что для Java не очень корректно. Нет, мне кажется, что эта задача решается только через опрос внешнего сервера. |