2012-11-15 5 views
2

가능한 중복 :
Discovering public IP programatically추출 공공 IP 주소

C 프로그램에서 내 공개 IP 주소를 알 수있는 방법이 있나요? DSL 모뎀을 사용하고 Linux 운영 체제에서 작업하고 있습니다.

공용 IP를 알아야 인터넷에있는 동안 서버 - 클라이언트 소켓 프로그램을 작동시킬 수 있습니다.

답변

0

예, STUN protocol을 사용하여 STUN 서버에 요청한 IP 주소를 물어볼 수 있습니다. 예를 들어 stunserver.org와 같이 사용할 수있는 여러 개의 실행중인 STUN 서버가 있습니다.

1

당신이 라우터 뒤에 있는지 여부는 분명하지 않지만, 그렇지 않은 경우에는 이것이 중복이라고 생각하지 않습니다.

라우터가있는 경우 라우터가 이미 컴퓨터로 전달되도록 구성되어 있지 않으면 라우터의 공용 IP 주소 을 알면은 거의 쓸모가 없습니다.

라우터를 사용하지 않는 경우 문제가 간단합니다. UDP 소켓을 만들고 비 로컬 IP 주소로 connect을 작성한 다음 소켓에서 getsockname으로 전화하십시오. 그 결과로 sockaddr_in은 해당 주소로 보내는 데 사용될 IP 주소, 즉 "공용 IP 주소"를 포함하게됩니다. 8.8.8.8은 dns "루트 서버"와 마찬가지로 사용할 주소를 선택하는 좋은 방법입니다. 패킷을 보낼 필요가 없다는 것을 기억하십시오 (이것이 TCP가 아닌 UDP를 사용하는 이유입니다). 단지 무연 소켓 인 connect 만 사용하십시오.