[linux] 네트워크 케이블 / 커넥터의 물리적 연결 상태를 감지하는 방법은 무엇입니까?

Linux 환경에서 RJ45 커넥터의 물리적 연결 또는 연결 해제 상태를 소켓에 감지해야합니다. BASH 스크립팅 만 사용하는 것이 좋습니다.

다른 사이트에서 제안 된 다음 솔루션은이 목적으로 작동하지 않습니다.

  1. ‘ifconfig’사용-네트워크 케이블이 연결되어 있지만 네트워크가 올바르게 구성되지 않았거나 현재 작동하지 않기 때문입니다.
  2. 호스트 핑-제품이 알 수없는 네트워크 구성 및 알 수없는 호스트를 사용하여 LAN 내에 있기 때문에.

/ proc 파일 시스템에서 사용할 수있는 상태가 있습니까 (다른 모든 것이 있습니까)?

Linux 세계는 아이콘 트레이에서 팝업되는 자체 Windows 버전 버블을 어떻게 사용하여 네트워크 케이블을 막았다 고 가정합니까?


켄트 프레드릭로타 , 당신의 대답은 모두 내 필요를 충족시킵니다 … 많은 감사합니다! 내가 어느 것을 사용할 것인가 … 나는 아직도 모른다.

나는 당신을 정답으로 둘 수 없다고 생각합니까? 그리고 내가 당신을 선택하는 것이 아마 당신에게 공평합니다. 내가 생각하는 동전을 뒤집어? 다시 한 번 감사합니다!



답변

당신은 노드를보고 싶어

/ sys / class / net /

나는 내 실험 :

전선 연결 :

eth0/carrier:1
eth0/operstate:unknown

와이어 제거 :

eth0/carrier:0
eth0/operstate:down

다시 연결 한 전선 :

eth0/carrier:1
eth0/operstate:up

사이드 트릭 : 한 번에 모든 속성을 쉽게 수확 할 수 있습니다.

grep "" eth0/* 

이것은 멋진 key:value쌍 목록을 형성합니다 .


답변

ethtool 을 사용할 수 있습니다 :

$ sudo ethtool eth0
Settings for eth0:
    Supported ports: [ TP ]
    Supported link modes:   10baseT/Half 10baseT/Full
                            100baseT/Half 100baseT/Full
                            1000baseT/Full
    Supports auto-negotiation: Yes
    Advertised link modes:  10baseT/Half 10baseT/Full
                            100baseT/Half 100baseT/Full
                            1000baseT/Full
    Advertised auto-negotiation: Yes
    Speed: 1000Mb/s
    Duplex: Full
    Port: Twisted Pair
    PHYAD: 0
    Transceiver: internal
    Auto-negotiation: on
    Supports Wake-on: umbg
    Wake-on: g
    Current message level: 0x00000007 (7)
    Link detected: yes

링크 상태 만 얻으려면 grep을 사용할 수 있습니다.

$ sudo ethtool eth0 | grep Link
    Link detected: yes


답변

‘ip monitor’를 사용하여 REAL TIME 링크 상태를 변경하십시오.


답변

cat /sys/class/net/ethX 가장 쉬운 방법입니다.

인터페이스가 작동해야합니다. 그렇지 않으면 잘못된 인수 오류가 발생합니다.

먼저 :

ifconfig ethX up

그때:

cat /sys/class/net/ethX


답변

낮은 수준에서 이러한 이벤트는 폴링없이 rtnetlink 소켓을 사용하여 잡을 수 있습니다 . 참고 : rtnetlink를 사용하는 경우 udev와 함께 작업해야합니다. 그렇지 않으면 udev가 새 네트워크 인터페이스의 이름을 바꿀 때 프로그램이 혼란 스러울 수 있습니다.

셸 스크립트로 네트워크 구성을 수행 할 때 발생하는 문제는 이벤트 처리에 셸 스크립트가 끔찍 하다는 것입니다 (예 : 네트워크 케이블 연결 및 분리). 보다 강력한 기능이 필요한 경우 네트워크 구성을 위해 설계된 프로그래밍 언어NCD 프로그래밍 언어를 살펴보십시오 .

예를 들어, “케이블 연결”및 “케이블 출력”을 stdout에 인쇄하는 간단한 NCD 스크립트 (인터페이스가 이미 작동한다고 가정) :

process foo {
    # Wait for device to appear and be configured by udev.
    net.backend.waitdevice("eth0");
    # Wait for cable to be plugged in.
    net.backend.waitlink("eth0");
    # Print "cable in" when we reach this point, and "cable out"
    # when we regress.
    println("cable in");   # or pop_bubble("Network cable in.");
    rprintln("cable out"); # or rpop_bubble("Network cable out!");
                           # just joking, there's no pop_bubble() in NCD yet :)
}

(내부적으로 net.backend.waitlink()rtnetlink를 net.backend.waitdevice()사용하고 udev를 사용합니다)

NCD의 개념은 네트워크를 구성하기 위해 독점적으로 사용하므로 일반적으로 구성 명령은 다음과 같은 것입니다.

process foo {
    # Wait for device to appear and be configured by udev.
    net.backend.waitdevice("eth0");
    # Set device up.
    net.up("eth0");
    # Wait for cable to be plugged in.
    net.backend.waitlink("eth0");
    # Add IP address to device.
    net.ipv4.addr("eth0", "192.168.1.61", "24");
}

주목해야 할 중요한 부분은 실행이 회귀 된다는 것입니다 . 예를 들어, 케이블을 뽑으면 IP 주소가 자동으로 제거됩니다.


답변

이러한 이벤트를 감지하는 데몬은 두 가지가 있습니다.

ifplugdnetplugd


답변

대부분의 최신 Linux 배포판 은이를 위해 NetworkManager 를 사용 합니다. D-BUS를 사용하여 이벤트를 청취 할 수 있습니다.

mii-tool이더넷을 염두에두고 명령 줄 도구로 상태를 확인하려면을 사용할 수도 있습니다 .