2014-02-10 2 views
1

두 개의 IP가 같은 네트워크에 있으면 bash 스크립트로 테스트하고 싶습니다.Linux : 같은 네트워크에 있는지 확인하십시오.

나는 IP $remoteIP을 가지고 있고 나는 동일한 네트워크에있는 경우 내 현재의 시스템으로 (로컬 영역 네트워크) 테스트 할 (지금의 서브넷 마스크 예를 들어 $remoteIP = 192.168.2.200hostname -I = 192.168.2.13 예를 255.255.255.0 이들에 대한 호스트가 동일한 네트워크에 있습니다. 192.168.1.32의 호스트는 같은 네트워크에 있지 않습니다.)

로컬 네트워크의 컴퓨터에서 ssh를 실행했는지 확인하고 싶습니다. 직접 IP가있는 일부 서버. ps1-prompt (녹색 = 아니오 ssh, 노란색 = 로컬 네트워크, 빨간색 = 온라인 서버)의 색을 지정하려면

처음에는 큰 서브넷 마스크 (255.0.0.0, 255.255) 만 지원하면됩니다. 0.0, 255.255.255.0).

그래서 나는 다음과 같은 단계를 필요는 SSH 접속이 마스크 무엇 서브넷

  • 시험에 온다 인터페이스의

    1. 가져 오기 서브넷 마스크
    2. (단순 [...] 경우) ssh 연결이 오는 것을 통해 IP 주소를 얻으십시오
    3. 원격 IP 주소를 얻으십시오 (나는 몇몇 환경 변수에서 생각할 것입니다)
    4. 서브넷 마스크를 기반으로 두 개의 주소를 substring합니다.
    5. 네트워크 부분 비교.

    1, 3 및 5 지점에서 나는 그 일을 수행하는 데 아무런 단서가 없습니다.

  • +0

    나는 그것이 아닌을의 알고 대답, 버그'ping -t 1 $ remoteIP'는 같은 네트워크에 있지 않을 때 실패합니다. –

    +0

    하지만 실패하지 않는다면 그것이 같은 네트워크에 있다면 shure가 아닙니다 ;-) 나는 내가 도달 할 수있는 shure입니다. 다른 일부 neworks 통해 서버. – Tobi

    답변

    5

    대체 전략은 Linux의 ip 명령을 사용하여 기본 게이트웨이가 무엇인지 결정하고 주어진 IP 주소가 게이트웨이를 통해 라우팅되는지 여부입니다.

    기본 게이트웨이

    ip route의 출력에서 ​​볼 수있다 :

    $ ip route | awk '/default/ {print $3}' 
    192.168.1.1 
    

    가 특정 IP 주소를 사용하는 라우팅 방법을 결정하려면 다음

    $ ip route 
    default via 192.168.1.1 dev eth0 metric 100 
    192.168.1.0/24 dev eth0 proto kernel scope link src 192.168.1.2 
    

    그냥 기본 게이트웨이의 IP 주소를 얻으려면 ip route get :

    $ ip route get 4.2.2.2 
    4.2.2.2 via 192.168.1.1 dev eth0 src 192.168.1.2 
    
    $ ip route get 192.168.1.10 
    192.168.1.10 dev eth0 src 192.168.1.2 
    

    (f IRST 명령을 말한다 "via 192.168.1.1"이

    함수에 함께 최선을 다하는) 기본 게이트웨이를 통해 연결됩니다 나타내는 :

    is_remote_ip() { 
        ip route get $1 | grep -q "via $(ip route | awk '/default/ {print $3}') " 
    } 
    

    데모 :

    $ is_remote_ip 4.2.2.2 && echo yes || echo no 
    yes 
    
    $ is_remote_ip 192.168.1.10 && echo yes || echo no 
    no 
    
    +0

    좋은 출발점이지만 내 서버는 예를 들어 "via"를 인쇄하지 않습니다. – Tobi

    관련 문제