Как я могу получить порт Ethernet с учетом IP-адреса?

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

Спасибо.


person fzkl    schedule 13.02.2011    source источник


Ответы (3)


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

/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}'
person Shawn Chin    schedule 13.02.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

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

person Nick    schedule 13.02.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 делает отступ во всех строках, кроме строки имени интерфейса, он будет соответствовать только имени интерфейса.

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

person d_b    schedule 13.02.2011