문제

다음 설정을 고려하십시오.LAN 인터페이스와 WiFi 인터페이스(새 노트북의 표준)를 갖춘 Windows PC.각 인터페이스는 네트워크에 연결되거나 연결이 끊어질 수 있습니다.어댑터 중 어느 것이 인터넷에 연결되어 있는지 확인하는 방법이 필요합니다. 특히 둘 다 서로 다른 네트워크에 연결되어 있는 경우(하나는 인터넷에 연결되어 있고 다른 하나는 인터넷에 연결되어 있지 않음)

나의 현재 솔루션은 IPHelper의 "GetBest인터페이스" 기능을 제공하고 IP 주소 "0.0.0.0"을 제공합니다.

이 문제에 대해 제안할 수 있는 다른 해결책이 있습니까?

몇 가지 답변에 따라 자세히 설명하겠습니다.

  • 바인딩할 어댑터를 선택해야 하는 제품이 있기 때문에 이 기능이 필요합니다.제품이 실행될 네트워크나 호스트의 설정을 제어할 방법이 없기 때문에 가능한 한 적은 가정으로 가능한 한 강력한 솔루션이 필요합니다.
  • 이 작업은 제품의 일부이므로 코드에서 수행해야 합니다.

@크리스 업처치:이로 인해 google.com이 작동하고(보통 문제가 되지 않음) 핑을 허용하기 위해 설치된 개인 방화벽에 의존하게 됩니다.

@까지:Steve Moon이 말했듯이, 내부 네트워크 설정에 대해 많은 가정을 하기 때문에 어댑터의 주소에 의존하는 것은 다소 위험합니다.

@스티브 문:라우팅 테이블을 살펴보면 좋을 것 같지만 라우팅 로직을 직접 적용하는 대신 위에서 설명한 "GetBestInterface"를 사용하려고 합니다.나는 그것이 해야 할 일이 정확히 당신의 답변에 설명된 것과 같다고 믿지만 실제로는 확실하지 않습니다.내가 내 자신의 "라우팅 논리"를 구현하는 것을 꺼리는 이유는 "하드코어" 네트워크 사람들이 작성하고 테스트한 라이브러리/API를 사용하는 것보다 내가 잘못할 가능성이 더 높기 때문입니다.

도움이 되었습니까?

해결책

기술적으로는 "인터넷에 연결"되지 않습니다.실제 질문은 어떤 인터페이스가 원하는 주소로 라우팅될 수 있는지입니다.지금은 목적지까지의 특정 경로가 없는 경우 적용되는 "기본 경로"를 쿼리하고 있습니다.그러나 특정 경로를 무시하고 있습니다.

다행히도 99.9%의 일반 사용자에게는 이것이 효과가 있습니다.라우팅 테이블이 많지 않을 가능성이 높으며 GetBestInterface는 자동으로 무선보다 유선을 선호하므로 괜찮을 것입니다.당신이 망친 0.1%의 사건에 대해 재정의 옵션을 던져서 하루를 끝내십시오.

그러나 기업용으로 사용하려면 특정 대상에 대해 GetBestInterface를 사용해야 합니다. 그렇지 않으면 누군가가 대상과 동일한 LAN에 있는 경우 문제가 발생합니다. 즉, "외부" 인터페이스가 아닌 "내부" 인터페이스를 사용해야 합니다. ) 또는 목적지까지의 특정 경로가 있습니다(예를 들어 내 내부 네트워크가 목적지의 네트워크와 피어링될 수 있음).

그렇다면 이 어댑터를 "인터넷에 연결"하여 무엇을 하려는지 잘 모르겠습니다. 따라서 별 문제가 아닐 수도 있습니다.

다른 팁

분명히 Vista에는 인터넷 연결 등을 쿼리할 수 있는 새로운 인터페이스가 있습니다.다음을 살펴보세요. NLM 인터페이스 그리고 구체적으로 INetworkConnection - GetConnectivity 메서드를 사용하여 네트워크 연결이 인터넷에 연결되어 있는지 구체적으로 쿼리할 수 있습니다.

또한보십시오: Windows Vista의 네트워크 인식불행하게도 이것은 Vista에서만 사용할 수 있으므로 XP의 경우 원래 경험적 방법을 유지해야 합니다.

라우팅 테이블을 살펴보겠습니다.경로가 0.0.0.0이고 활성화되어 있으며 메트릭이 가장 낮은 NIC가 현재 인터넷에 패킷을 보내는 NIC입니다.

그래서 제 경우에는 '인터넷 NIC'가 가장 위에 있는 것 같아요.

IPv4 Route Table
===========================================================================
Active Routes:
Network Destination        Netmask          Gateway       Interface  Metric
          0.0.0.0          0.0.0.0        10.0.0.10        10.0.0.51     20
          0.0.0.0          0.0.0.0        10.0.0.10        10.0.0.50     25
(much other stuff deleted)

또 다른 대안은 ping 또는 GetBestInterface 4.2.2.2입니다. 이는 현재 GTEI가 보유하고 있는 오래되고 유서 깊은 DNS 서버입니다.내 기억이 맞다면 이전에는 Sprint가 맡았습니다.

각 NIC를 통해 google.com을 ping합니다.

시작 > 실행 > cmd.exe(XP 및 Vista에서 작동): ipconfig /all

컴퓨터의 인터페이스에 대한 모든 정보가 표시됩니다."공용" 인터페이스에는 공용 IP 주소가 있어야 합니다.우선, 그러면 안된다 192.168.x.x 또는 10.x.x.x가 됩니다 :)

일부 공개 사이트에 대한 추적 경로를 실행하면 표시됩니다.물론, 해당 위치로 이동하는 인터페이스가 두 개 이상 있을 수 있습니다.

라우팅 테이블을 볼까요?일반적으로 Windows에서 네트워크 간 라우팅을 수행하지 않는 한(가능하지만 요즘 클라이언트 컴퓨터에서는 이례적임) 기본 경로를 보유하는 인터페이스는 인터넷에 연결됩니다.

귀하의 질문에는 이 작업을 수행하는 이유와 대상이 자세히 설명되어 있지 않으므로 구체적인 내용을 제공할 수 없습니다.명령줄 도구인 "route"가 도움이 될 수 있지만 라우팅 테이블을 보는 데 사용하는 프로그래밍 언어에 관계없이 라이브러리가 있을 수 있습니다.

대부분의 사이트에서는 인터페이스의 IP 주소에 의존할 수 없습니다(예: RFC-1918 주소 [192.168.0.0/16, 172.16.0.0/12, 10.0.0.0/8]가 인터넷이 아니라고 가정). 일종의 NAT 방화벽 또는 프록시 설정과 "인터넷" 인터페이스는 실제로 인터넷에 연결되는 "개인" LAN에 있습니다.

업데이트:추가 정보를 토대로 볼 때 적절한 해결책이 있는 것 같습니다.IP 주소의 경계 사례이기 때문에 0.0.0.0을 선택하는 것이 확실하지 않습니다. 특정 플랫폼/언어 조합에서는 괜찮을 수도 있습니다.(API 설명에 따르면) 주소만 지정할 수 있는 것처럼 들리는데, 인터넷에 있는 것으로 알려진 일부 주소는 왜 안 됩니까?웹 사이트의 IP 주소입니까, 아니면 65.66.67.68과 같은 임의의 주소입니까?rfc-1918 주소, 로컬 호스트 범위(127.0.0.0/8), 멀티캐스트, 기타 예약된 범위, .mil 또는 .gov로 확인되는 주소 중 하나를 선택하지 않도록 주의하세요. getbestinterface가 트래픽을 전송하는 것처럼 들리지 않습니다. 연방 정부가 문을 부수도록 하여 알아내는 것은 짜증나는 일입니다...:)

네트워크 관점에서 보면 어느 쪽이든 언제든지 "인터넷"으로 라우팅될 수 있습니다.스위치에서 스패닝 트리 프로토콜과 같은 기능이 활성화된 경우 처음에는 라우팅 카드였던 것이 더 이상 존재하지 않을 수도 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top