Как определить физическое состояние подключенного сетевого кабеля / разъема? - PullRequest
133 голосов
/ 30 апреля 2009

В среде Linux мне нужно определить физическое состояние подключения или отключения разъема RJ45 к его разъему. Предпочтительно использовать только сценарии BASH.

Следующие решения, которые были предложены на других сайтах, НЕ работают для этой цели:

  1. Использование 'ifconfig' - поскольку сетевой кабель может быть подключен, но сеть не настроена должным образом или в данный момент не работает.
  2. Проверка связи с хостом - поскольку продукт будет находиться в локальной сети с использованием неизвестной конфигурации сети и неизвестных хостов.

Не существует ли какого-либо состояния, которое можно использовать в файловой системе / proc (все остальное там)?

Как в мире Linux предполагают наличие собственной версии пузыря Windows, которая выскакивает из панели значков, показывая, что вы только что отсоединили сетевой кабель?


Кент Фредрик и Лотар , оба ваших ответа удовлетворяют мою потребность ... большое спасибо! Какой я буду использовать ... Я до сих пор не знаю.

Думаю, я не могу поставить вас обоих за правильный ответ? И это, вероятно, справедливо для вас, что я выберу один. Я полагаю, бросить монетку? Еще раз спасибо!

Ответы [ 13 ]

0 голосов
/ 13 января 2019

Я использовал свое усовершенствованное устройство OpenWRT в качестве повторителя (который добавляет возможности виртуальной сети Ethernet и беспроводной локальной сети) и обнаружил, что значения несущей / opstate / sys / class / net / eth0 были ненадежными. Я поиграл с /sys/class/net/eth0.1 и /sys/class/net/eth0.2, а также (по крайней мере, на мой взгляд) не нашел надежного способа обнаружить, что что-то физически подключено и говорить на любом из портов Ethernet. Я нашел немного грубый, но, казалось бы, надежный способ обнаружить, было ли что-либо подключено с момента последней перезагрузки / включения питания, по крайней мере (что работало именно так, как мне было нужно в моем случае).

ifconfig eth0 | grep -o 'RX packets:[0-9]*' | grep -o '[0-9]*'

Вы получите 0, если ничего не было подключено, и что-то> 0, если что-то было подключено (даже если оно было подключено и с тех пор удалено) с момента последнего включения или перезагрузки.

Надеюсь, это хоть кому-нибудь поможет!

0 голосов
/ 14 декабря 2018

Вы можете использовать ifconfig.

# ifconfig eth0 up
# ifconfig eth0

Если в записи отображается RUNNING, интерфейс физически подключен. Это будет показано независимо от того, настроен ли интерфейс.

Это просто еще один способ получить информацию в /sys/class/net/eth0/operstate.

0 голосов
/ 06 октября 2017

на арке линукс. (Я не уверен, что на других дистрибутивах) вы можете увидеть operstate. который отображается, если подключен, или выключен, если не состояние находится на

/sys/class/net/(interface name here)/operstate
#you can also put watch 
watch -d -n -1 /sys/class/net/(interface name here)/operstate
...