Как я могу получить порт Ethernet по IP-адресу? - PullRequest
5 голосов
/ 13 февраля 2011

Я пытаюсь написать bash-скрипт для извлечения порта Ethernet интерфейса, IP-адрес которого я знаю.Мне нужно взять это из ifconfig, но я не могу понять, как это сделать.Есть идеи?

Спасибо.

Ответы [ 4 ]

7 голосов
/ 13 февраля 2011

Замените 127.0.0.1 на IP-адрес, для которого вы хотите получить информацию об интерфейсе для

ifconfig  | grep 127.0.0.1 -B1 | grep Link | cut -f 1 '-d '

Если вы также хотите определить физический порт на машине, запустите

ethtool -p $OUTPUT_OF_FIRST_COMMAND

Будет мигать индикатор карты Ethernet, связанной с этим интерфейсом.

4 голосов
/ 13 февраля 2011

Немного грязно, но должно работать:

/sbin/ifconfig | grep -B1 1.2.3.4 | awk '{print $1; exit}'

При желании вы можете использовать команду ip , которую при использовании опции -o|-oneline анализировать намного проще,Например

ip -o addr | awk '/1.2.3.4/{print $2}'
2 голосов
/ 13 февраля 2011

С макушки головы я мог бы использовать grep:

ifconfig |grep -B1 '127.0.0.1' |grep -o '^[a-zA-Z0-9]*'  

Где «127.0.0.1» - это адрес, который вы ищете.

-B1 устанавливает количество строк, предшествующих совпадению, для возврата.

-o устанавливает второй grep для возврата только соответствующего сегмента вместо всей строки.

'^ [a-zA-Z0-9] *' соответствует любым буквенно-цифровым цифрам, которые начинаются в начале строки.

Поскольку ifconfig делает отступ во всех строках, кроме строки имени интерфейса, он будет соответствовать только имени интерфейса.

Это быстро и грязно, но должно работать.

0 голосов
/ 14 февраля 2011
ifconfig | awk 'BEGIN{RS=""}/127.0.0.1/{print $1}'

ifconfig | ruby -00 -ane 'puts $F[0] if /127.0.0.1/'
...