Подумалось, а не бросить ли этот bash, и не заняться ли изучением продвинутых скриптовых языков. Вот только можно ли в других языках также легко перенаправлять вывод в stdout одной программы на вход stdin другой программы.
Есть две задачи.
Задача 1: нужно реализовать сканирование сети, с целью выявить все хосты по MAC-адресу. Для этого на компьютере создан bridge-интерфейс, команда "brctl showmacs" отображает MAC-адреса всех устройств, после делается перебор командой arp, которая перебирает все ip-адреса, которые могут входить в подсеть:
Код: Выделить всё
IF=br0
brctl showmacs $IF | awk '{print $2}' | grep ":" | while read MACADDR
do
for IPADDR in "$IPVARIANTS"
do
if [[ -n "$(arp -n "$IPADDR" | grep "$MACADDR")" ]]; then
IPADDRTRUE=true
echo -e "$MACADDR \t $IPADDR"
fi
done
if [[ IPADDRTRUE != true ]]; then
echo -e "$MACADDR \t no ip address"
fi
done
Знаю, что задача переборки двух строковых массивов выполняется совсем не так, но как средствами bash это сделать более правильно - я не сообразил, лучше конечно не вызывать цикл arp для каждого MAC-адреса, а сделать это один раз, а ещё не сообразил как задать переменную IPVARIANTS - в ней должны быть перечислены все ip-адреса через пробел, входящие в заданную подсеть, например в подсеть 128.0.0.0/22
Задача 2: нужно реализовать автовход по ssh или telnet на свитчи. Авторизация по ключу не поддерживается, то есть нужно сделать, чтобы скрипт передавал логин и пароль прямо в терминал устройства, вставляя в передачи паузы нужной длины. Но сначала нужно, чтобы терминал устройства вообще как-то открывался. Есть windows-программа The Dude, которорая работает в wine, программа представляет собой карту сети и, кликнув на любое устройство на карте, можно на него зайти. wine позволяет запускать bash-скрипты, если им присвоено расширение exe. У меня в настройках The Dude прописан вызов инструмента "c:\ssh.exe root@[Device.FirstAddress]", то есть при заходе на устройство 128.0.0.3 должен вызываться скрипт ssh.exe c параметром root@128.0.0.3, мне хотелось, чтобы этот скрипь вызывал окно эмулятора терминала с запущеным в нём клиентом ssh
Код: Выделить всё
#!/bin/bash
/usr/bin/xfce4-terminal -x "/usr/bin/ssh $1"
ssh-сессия не открывается, окно эмулятора терминала появляется на экране и тут же изчезает, я не успеваю прочитать, что на него выводится. А как в этом скрипте реализовать ещё и автовход - вообще не знаю.