2015-10-21 10 views
1

Итак, если я хотел подключиться через SSH ко всем устройствам в сети, используя таблицу ARP, чтобы точно знать, где подключиться, что мне делать?Bash - Табличка ARP для велосипедного прохода и хранения IP-адресов в переменной

код будет выглядеть примерно так:

#!/bin/bash 

for a in $([ARP Table here?]) 
do 
    ssh [email protected]$a true 
    echo "Connected to $a" 
done 

Я не уверен в том, как хранить Dinamic IP-адреса в переменной. Также я не уверен в том, что я могу использовать эту переменную впоследствии для подключения через ssh, потому что IP не будет int, а скорее является строкой.

EDIT: После того, как Андрей сделал мне заметить, что не каждое устройство в моей сети может быть в моей ARP таблицы, я задаюсь вопросом:

Является ли это лучше начинать от 0 до максимального значения текущей маски сети или поиск в таблице ARP?

Вот два случая:

#!/bin/bash 

for a in $(seq 255) 
do 
    ssh [email protected]$a true 
    echo "Connected to 172.18.10.$a" 
done 

или

#!/bin/bash 

for a in $([ARP Table here?]) 
do 
    ssh [email protected]$a true 
    echo "Connected to $a" 
done 
+0

Возможно, это не очень хороший подход. Нет гарантии, что какое-либо данное локальное устройство действительно будет в вашем кэше ARP в любой момент времени. –

+0

@AndrewMedico Итак, вы говорите, что в сети могут быть какие-то деления, а не в моей таблице ARP. Затем я отредактирую свой вопрос. –

+0

Кроме того, «все устройства» не говорят нам достаточно. Какие устройства? Cisco IOS? Junos? FreeBSD или Linux? Если вы говорите о кэше arp на конкретном хосте, вы можете проанализировать вывод 'arp -an' в большинстве операционных систем. Но послушайте Андрея, он говорит правду; ваш кеш arp является эфемерным и зависит от активности сети. ARP - это инструмент, позволяющий вашим устройствам говорить Ethernet друг с другом, это не стратегия управления сетью. – ghoti

ответ

1

Лучшим решением, чем разработка собственных инструментов сканирования, может быть использование того, что уже существует.

Чтобы посмотреть, какие IP-адреса достижимы (в качестве побочного эффекта будет заполнен ваш ARP-кеш), вы можете использовать fping. Вероятно, он доступен для вашей ОС или дистрибутива. Пример из моей локальной сети:

$ fping -g 10.1.1.0/29 
10.1.1.1 is alive 
10.1.1.2 is alive 
10.1.1.5 is alive 
10.1.1.3 is unreachable 
10.1.1.4 is unreachable 
10.1.1.6 is unreachable 

Команда fping является ICMP-только - он посылает пинги. Если ваша цель состоит не только в определении того, какие устройства существуют, но и в том, отвечают ли они на SSH-порту (22), вы можете использовать tcping или что-то подобное.

for ip in $(seq -f "10.1.1.%g" 1 9); do 
    if tcping -u 200 -q $ip 22; then 
    echo "yes: $ip" 
    fi 
done 

Другой вариант, который может быть немного сложнее скрипт будет использовать реальный инструмент для сканирования, как nmap (как видно на The Matrix).

Если вы используете систему сетевого мониторинга, проверьте, есть ли встроенные средства сетевого сканирования. Cacti, например, имеет discovery plugin. Nagios имеет quite a few of them.

+0

Ty очень много готи для всего: D –

+0

Мое удовольствие. :) – ghoti

1

я собираюсь ответить на ваш первоначальный вопрос (тот, название вводит).

Чтобы прочитать таблицу агр и перебирать каждый IP-адрес на нем, вы можете сделать следующее

#!/bin/bash 

for a in $(arp -n | tail -n+2 | cut -d' ' -f1) 
do 
    ssh [email protected]$a true 
    echo "Connected to $a" 
done 
  • arp команда выводит кэш агр, наряду с некоторыми деталями о каждой записи.
  • tail используется для удаления первой строки, в которой содержит заголовок для разных столбцов вывода arp.
  • cut удаляет всю дополнительную информацию, оставляя только IP-адрес, по одному на каждую строку.
+0

К сожалению, файловая система/proc - это Linuxism. Существуют версии для других операционных систем, но они обычно не монтируются по умолчанию, и, насколько я понял, они не включают расширение/proc/net. OP не указал, какая операционная система используется здесь, поэтому важно, чтобы ваши ответы были переносимыми. – ghoti

+0

@ghoti ok, переключение на команду arp –