네트워크 ID를 결정하는 더 좋은 방법은 무엇입니까?

네트워크 ID를 결정하는 더 좋은 방법은 무엇입니까?

로컬 NAS를 마운트하거나 특정 서비스를 (비활성화/)활성화하는 등 (Linux 랩톱을 사용하여) 어떤 네트워크에 연결되어 있는지 확인하는 데 필요한 여러 스크립트가 있습니다. 추가적인 복잡성은 다른 SSID 또는 네트워크 인터페이스(유선/WiFi)를 통해 연결될 때 일부(대부분) 네트워크가 여전히 올바르게 인식되어야 한다는 것입니다. 또한 특정 호스트를 사용할 수 있다고 믿을 수 없습니다.

현재 스크립트는 IPv4 게이트웨이를 기본 게이트웨이로 사용하고 IPv6 게이트웨이를 폴백으로 사용하여 라우팅 테이블을 구문 분석하여 기본 게이트웨이 및 관련 MAC 주소를 찾습니다.

#!/bin/sh

ROUTER=$(ip -4 route list | grep "default" | head -n 1 | cut -f 3 -d " ")
# echo "ROUTER=${ROUTER}" >&2
if [ "${ROUTER}" != "" ]; then
    MAC=$(ip neigh | grep -E "^${ROUTER} " | cut -f 5 -d " ")
    # echo "MAC=${MAC}" >&2
    if [ ${MAC} != "" ]; then
        echo "${MAC}"
        exit 0
    fi
fi

ROUTER6=$(ip neigh | grep -R "^fe80.* router " | head -n 1 | cut -f 1 -d " ")
# echo "ROUTER6=${ROUTER6}" >&2
if [ "${ROUTER6}" != "" ]; then
    MAC6=$(ip neigh | grep -E "^fe80.* router " | head -n 1 | cut -f 5 -d " ")
    # echo "MAC6=${MAC6}" >&2
    if [ "${MAC6}" != "" ]; then
        echo "${MAC6}"
        exit 0
    fi
fi

exit 1

지금까지는 잘 작동하지만 모든 필드 구문 분석과 게이트웨이 MAC에 대한 의존성으로 인해 약간 취약할 수 있습니다.

연결 방법에 관계없이 네트워크를 식별할 수 있는 안정적인 네트워크 ID를 얻는 더 좋은 방법이 있습니까?

답변1

신뢰할 수 있는 네트워크 식별자는 없으며 IP 주소는 네트워크 ID로 시작해야 하지만 사설 네트워크에서는 이는 고유하지 않으며 매우 무작위인 네트워크 10.243.168.0/24를 사용하지 않는 한 자신의 네트워크를 감지할 수 있습니다. ipv6을 사용하면 개인 네트워크가 필요하지 않으므로 전역적으로 고유한 접두사가 있는 경우 이를 사용할 수 있지만 접두사는 로컬 fe80에 따라 다릅니다. WIFI와 유사한 인증에 802.X를 사용할 수 있으므로 알려진 네트워크에 인증하고 거기에서 스크립트를 트리거할 수 있습니다.

기본 경로만 나열하여 약간 최적화할 수 있으므로 grep을 수행할 필요가 없지만 여러 개의 기본 게이트웨이 IP를 가질 수 있습니다. -4 Route list default

서비스 검색이나 다른 형태의 비커닝을 위해 mdns를 사용할 수 있습니다. 비콘 역할을 할 수 있는 Host Identity Protocol이 있지만 단일 호스트에 의존하고 싶지 않기 때문에 개인적으로 arp 테이블(예: arp -an의 출력)을 주기적으로 수집하거나 net/arp를 직접 수집합니다. /proc/에서 특정 네트워크 가능성에 대한 연결 수를 계산합니다.

어쩌면 기존 스크립트를 고수하는 것이 더 나을 수도 있습니다.

관련 정보