2009-05-31 2 views

답변

11

공개 IP를 얻는 데 항상 신뢰할만한 방법이있는 것은 아니지만 OS X의 DNSService API는 UPnP 및/또는 NAT 포트 매핑 프로토콜을 사용하여 공용 IP를 가져옵니다 (다른 것들 중에서). C API를 사용하는 방법을 설명하는 코드는 여기에 표시되는 약간 큰 (50-60 줄) 것이지만 기능을 둘러싼 멋진 ObjC 래퍼를 구현하는 Apple 샘플 코드가 있으며 심지어 직접 반환 할 수있는 기능을 제공합니다 공개 IP 주소의 UInt32 및 NSString 표현.

해당 코드 자체는 is located here이지만, zip 파일을 다운로드하고 프로젝트에 PortMapper.h 및 PortMapper.m을 포함하여 직접 사용하는 것이 가장 좋습니다. 그럼 당신이해야 할 일은 다음과 같습니다.

NSString * publicAddressString = [PortMapper findPublicAddress]; 
+0

그냥 테스트하고 매력처럼 작동합니다! 고마워, 아주 멋진 래퍼. –

+0

@Jim은 iOS 앱으로이 작업을 수행합니다. –

+0

@Jim findPublicAddress가 응답하지 않습니다. 내가 로컬 주소를 찾을 수는 있지만. –

1

공개 IP를 얻을 수있는 확실한 방법이 없습니다. 네트워크 토폴로지에 따라 IP 주소 풀, 동적 경로, NAT 계층, 프록시 서버 등 여러 가지 이유로 발신 주소에 의존하지 못할 수 있습니다.

2

주요 조직의 네트워크 토폴로지 차트에서 그렇게하십시오. 그것은 계몽 적입니다. NAT, 방화벽 및 기타 모든 "흑 마술"의 요점은 사용자가 모르게 네트워크가 주소를 관리 할 수 ​​있도록 (사용자 보호 포함)하는 것입니다.

서버의 외부 방향 IP 주소를 안정적으로 얻을 수 있었던 (신뢰할 수있는 상대 개념) 신뢰할 수있는 세 가지 방법이 있습니다.

첫 번째는 네트워크 신 자체로서입니다 (물을 때 신으로 참조하십시오. 정보를 얻는 데 도움이됩니다). 경우에 따라 (항상은 아님) 하위 주소를 유지하면서 IP 주소의 상위 바이트를 간단하게 매핑합니다. 때로는 더 복잡하지만 여전히 사용할 수있는 규칙을 따릅니다. 이 규칙은 언제든지 변경 될 수 있습니다.

두 번째는 네트워크 외부에서 사용자가 쿼리 할 수있는 상자를 가지고 있으며, 차례로 IP 주소를 알려줄 수 있습니다.

세 번째는 정보를 검색하기 위해 외부 DNS 서버 (회사가 아닌)에 연결하는 것입니다.

물론 외부 IP 주소를 알아야합니다. DNS의 전체적인 요점은 IP 주소에 대해 너무 많이 걱정할 필요가없고 단지 도메인 이름으로 기계를 참조하는 것입니다.

+0

네 번째 방법은 NAT 포트 매핑 프로토콜입니다. 그건 당신의 네트워크 하드웨어에 달렸지 만, 나는 세부 사항에 익숙하지 않다. –

+0

감사합니다. 나는 동적 IP를 보려고 유틸리티를 쓰고 있는데 왜 그렇게 신뢰할 수있는 클라이언트를 찾지 못했는지 더 잘 이해하고있다. 귀하의 메모에 따르면, 나는 개인적인 사용을 위해 괜찮습니다 두 번째 방법을 선택합니다. –

관련 문제