2014-12-16 2 views
0

JavaFX 데스크탑 응용 프로그램에서 사용자의 원격 IP 주소를 가져와야합니다. 나는 인증 (내 프로그램이 데이터베이스 연결을 사용)과 같은 것들을 처리하기 위해 Spring을 사용하고있다. Java Servlet을 사용할 때 HTTP 요청에서 IP 주소를 얻는 방법을 알고 있습니다. 문제는 내 앱에 IP 주소가 없다는 것입니다. 필자는 IP를 검사하는 웹 사이트를 사용하고 html의 내용을 단순히 문자열로 변환하는 방법을 고려해 보았습니다. 그러나 모든 외부/외부 소스를 로컬에서 수행해야합니다. 도움이 될 몇 가지 추가 정보 : 내가 소켓을 사용하고 있지 않다, 내 응용 프로그램은 최종 사용자가 사용하는데, 그것은에만 연결이 있습니다JavaFX 데스크탑 응용 프로그램에서 원격 IP 주소 가져 오기

나는 사전에 감사

EDIT가 도움의 모든 종류의 감사 그것은 약간의 콘텐츠를 가져 오는 MySQL 데이터베이스와의 연결입니다. 로그인 할 때 IP 주소를 포트와 함께 데이터베이스의 특정 테이블에 넣으려면 사용자의 IP 주소를 검색해야합니다.

+1

외부 원본을 가져 오지 않고 외부 IP를 가져올 수 있다고 생각하지 않습니다. 물론, 누군가 나를 틀리게 증명할 수도 있습니다. 필요한 경우 http://icanhazip.com/을 사용하십시오. – EpicPandaForce

+0

@EpicPandaForce가 말한 바는 무엇입니까? 앱을 실행하는 컴퓨터가 찾고있는 IP를 직접 수신하지 않는 한, 이는 본질적으로 불가능합니다. 네트워크/포트 변환의 ​​특성으로 인해 외부 소스에 쿼리하거나 번역을 수행하는 라우터/방화벽을 쿼리하지 않아도 변환되지 않은 IP를 알 수 없습니다 (심각한 라우터/방화벽이 지원하지 않음). – admdrew

답변

1

주석에서 제안했듯이이를 수행하는 유일한 방법은 외부 소스를 쿼리하는 것입니다. 이렇게하기위한 코드를 쉽게 작성할 수 있습니다 (예 :

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; 
import java.util.stream.Collectors; 


public class RealIPScraper { 
    private static final String URL_STRING = "http://www.realip.info/api/p/realip.php" ; 

    private static final Pattern pattern = Pattern.compile("\\{\"IP\":\"(?<ip>.*)\"\\}"); 

    public static String getIP() throws IOException { 
     URL url = new URL(URL_STRING); 
     try (BufferedReader in = new BufferedReader(new InputStreamReader(url.openConnection().getInputStream()))) { 
      String content = String.join("\n", in.lines().collect(Collectors.toList())); 
      Matcher matcher = pattern.matcher(content); 
      if (matcher.matches()) { 
       return matcher.group("ip"); 
      } else { 
       return "No ip found"; 
      } 
     } 
    } 

} 
+0

언급 한 것과 같은 방식으로 포트를 얻을 수 있습니까? – McLovitch

+0

아니요 ... 나는 그 질문이 의미가 있다는 것을 확신하지 못합니다. 이 코드는 다른 (웹) 서버에 연결하여 작동합니다. 보고 된 포트는 사용자가 연결 한 서버의 포트 일 뿐이므로 원하는 작업을 수행하는 데 의미가 없습니다. –

관련 문제