저는 다른 개발자들과 협력하여 Linux 시스템이 데이터 통신 연결에 연결되지 않을 때마다 자동으로 업데이트하는 스크립트를 만들었습니다.
그러나 일부 시스템에서는 네트워크 관리자 대신 "systemd-networkd"를 사용하여 네트워크를 구성하고 두 프로그램을 동시에 사용하면 서로 충돌한다는 사실을 발견했습니다.
따라서 우리는 시스템에 설치된 nmcli에 실제로 의존할 수 없으며 이 솔루션을 사용할 수 없습니다.질문.
답변1
이를 자동으로 감지하는 신뢰할 수 있는 단일 방법은 없습니다. 네트워크가 계량되어 있음을 암시하는 방법이 있지만 이러한 방법은 보편적으로 배포되는 것과는 거리가 멀습니다.
WiFi 핫스팟 또는 테더링 장치로 작동하는 Android 장치는 DHCP 옵션 43을 문자열로 설정
ANDROID_METERED
하고 DHCP 응답에서 해당 옵션을 강제로 반환합니다. 바라보다:https://www.lorier.net/docs/android-metered.htmlApple은 iOS 기기의 핫스팟 기능을 사용하여 클라이언트에 연결 상태를 표시하는 자체 방법을 가지고 있는 것으로 보입니다., 비록 정보가 부족한 것으로 보입니다.
WiFi 베이스 스테이션은 Microsoft 설계를 구현할 수 있습니다.802.11 프로토콜 확장무선 네트워크의 측정 상태를 나타냅니다. Linux에서는
wpa_supplicant
이 정보를 받는 컴포넌트가 아닐까 생각합니다 .다른 정보가 없는 경우 Windows는 연결 유형(이더넷, WiFi, 4G, 3G 또는 기본/알 수 없음)에 따라서만 측정 연결 속성의 기본값을 설정합니다. 참조https://www.msoutlook.info/question/metered-network-warning
그러나 이러한 메시지가 표시되지 않으면 연결이 측정되지 않을 수도 있고 그렇지 않을 수도 있다고 가정할 수 없습니다. NetworkManager를 사용하면 사용자는 연결 상태에 대해 가장 잘 알 수 있으므로 연결을 구성할 때 측정 연결 속성을 설정할 수 있습니다.
따라서 사용자에게 스크립트 실행 선택/책임을 부여하거나 비활성화할 수 있습니다.
답변2
@telcoM이 말했듯이 연결이 측정되는지 확인할 수 있는 확실한 방법은 없습니다. 또 다른 옵션은 알려진 연결과 이를 측정할지 여부에 대한 테이블을 만드는 것입니다. 상대적으로 좋은 지표는 다음 명령을 사용하여 확인할 수 있는 외부 IP 주소입니다.
dig +short myip.opendns.com @resolver1.opendns.com
답변3
우리가 찾은 유일한 솔루션에는 여전히 네트워크 관리자가 필요합니다.
nmcli --terse --fields GENERAL.METERED dev show 2>/dev/null | grep --quiet "yes"