2015-05-23 3 views
1

Обычно, когда я хочу, чтобы мой публичный IP внутри моей программы, скопировать и вставить этот код:Как получить свой общедоступный IPV6-адрес из моего Java-приложения?

URL whatismyip = new URL("http://checkip.amazonaws.com"); 
    InputStreamReader in = new InputStreamReader(whatismyip.openStream()); 
    BufferedReader in = new BufferedReader(in); 
    final String ip = in.readLine(); //you get the IP as a String 
    System.out.println("You IP is: " + ip); 

Но этот код только дает мне мой публичный адрес IPv4, и если я типа «что это моя ip "в поиске Google, я получаю другой адрес IPV6 вместо IPV4. Из моего приложения я хочу получить IPv6-адрес, но я счел бы расточительным разобрать всю веб-страницу Google на «https://www.google.com/webhp?sourceid=chrome-instant&ion=1&espv=2&ie=UTF-8#q=what+is+my+ip+», чтобы найти в нем свой IPV6-адрес. У кого-нибудь есть лучшее решение, которое я планирую использовать?

Кроме того, когда я пытаюсь использовать «https://wtfismyip.com/text» вместо «http://checkip.amazonaws.com», я получаю исключение безопасности [вызванное ведущим «HTTPS»]

Изменения в протокол HTTPS для HTTP фиксирует исключение безопасности, но обновленный код все еще не работает правильно:

{ 
     final URL whatismyip = new URL("http://checkip.amazonaws.com"); 
     BufferedReader in = new BufferedReader(new InputStreamReader(
       whatismyip.openStream())); 
     final String ip = in.readLine(); //you get the IP as a String 
     System.out.println("Your IPV4 IP is: " + ip); 
    } 
    { 

     final URL whatismyip2 = new URL("http://wtfismyip.com/text"); 
     final BufferedReader in2 = new BufferedReader(new InputStreamReader(
       whatismyip2.openStream())); 
     final String ip2 = in2.readLine(); //you get the IP as a String 
     Application.printerr("Your IPV6 IP is: " + ip2); // Your IPV6 IP is the same at your IPV4 (wrong because when I check in the web browser is different) 
    } 

Кроме того, пытаясь вытащить адрес IPV6 из поиска Google «что мой IP» - «https://www.google.com/webhp?sourceid=chrome-instant&ion=1&espv=2&ie=UTF-8#q=what+is+my+ip+» - это даже не дать мне адрес IP-вообще , ни ipv4, ни ipv6. Все, что я получаю это:

<!doctype html><html itemscope="" itemtype="http://schema.org/WebPage" lang="en"><head><meta content= 
"Search the world's information, including webpages, images, videos and more. Google has many special features 
to help you find exactly what you're looking for." name="description"><meta content="noodp" name="robots"> 
<meta content="/images/google_favicon_128.png" itemprop="image"><title>Google</title><script>(function(){window.google={kEI:'SAxgVa73L4_FgwSy34LgCw',kEXPI:'3700256,3700366,4017578,4026111,4029815,4031300,4032032,4032500,4032521, 
4032631,4032643,4032645,4032677,4032926,4033142,4033184,4033191,4033307,4033344,4034425,4035816,4035881,4035980, 
4036005,4036345,4036464,4036486,4036531,4036539,4036665,4036896,4037457,4037538,4037611,8300096,8500394,8500851, 
8501248,8501279,8501295,8501351,8501406,8501489,8501497,10200083,10201180,10201191',authuser:0,kSID:'c9c918f0_10'}; 
google.kHL='en';})();(function(){google.lc=[];google.li=0;google.getEI=function(a){for(var b;a&&(!a.getAttribute||!(b=a.getAttribute("eid")));) 
a=a.parentNode;return b||google.kEI};google.getLEI=function(a){for(var b=null;a&&(!a.getAttribute||!(b=a.getAttribute("leid")));)a= 
a.parentNode;return b};google.https=function(){return"https:"==window.location.protocol};google.ml=function(){};google.time= 
function(){return(new Date).getTime()};google.log=function(a,b,e,f,l){var d=new Image,h=google.lc,g=google.li,c="",m= 
google.ls||"";d.onerror=d.onload=d.onabort=function(){delete h[g]};h[g]=d;if(!e&&-1==b.search("&ei=")){ 
var k=google.getEI(f),c="&ei="+k;-1==b.search("&lei=")&&((f=google.getLEI(f))?c+="&lei="+f:k!=google.kEI&&(
c+="&lei="+google.kEI))}a=e||"/"+(l||"gen_204")+"?atyp=i&ct="+a+"&cad="+b+c+m+"&zx="+google.time();/^ 
http:/i.test(a)&&google.https()?(google.ml(Error("a"),!1,{src:a,glmm:1}),delete h[g]):(window.google&&window.google.vel&& 
+0

кажется checkip.amazonaws.com имеет только ipv4 интерфейс, поэтому он принимает соединения только с ipv4 адресов. Вы также можете проверить https://wtfismyip.com/text. Он также должен распознавать v6 и v4. – skandigraun

+0

Я попробовал «https://wtfismyip.com/text», и сначала получил это большое исключение безопасности, а затем получил адрес, который был таким же, как адрес IPV4, который дал мне «checkip.amazonaws.com». См. Обновленный код, который будет опубликован в нижней части вопроса. –

+0

Не могли бы вы сделать код с https://wtfismyip.com/text? –

ответ

0

Мой спланированная решение использовать инструкции:

http://www.rgagnon.com/javadetails/java-fix-certificate-problem-in-HTTPS.html

Чтобы получить содержимое HTTPS веб-страницы https://wtfismyip.com/ (или какой-либо другой страницы HTTPS на что сайт - это не позволяет мне ничего получить, если я использую http). Затем используйте это содержимое, чтобы вывести адреса ipv4 и ipv6. Увидит, работает ли это.

Обновления: Это решение работает для получения вашего адреса IPV6 с сайта HTTPS с использованием Java

Смежные вопросы