LINUX.ORG.RU

[bash][бред]Обновление конфигурации сети


0

1

Вооружившись google написал этот шедерв гавно. Задача скрипта - поиск в сети анонимных провайдеров. Вопрос: на что заменить ifdown и ifup чтобы оно заработало. Cейчас пишет «SIOCDELRT: No such process» и не обновляет роуты

#!/bin/bash

old=$(cat /etc/network/interfaces | tail -3 | head -1 | awk '{print $2}')

for ((i=3; i <= 254; i++))
do
  new=10.2.31.$i
  sed -i "s/$old/$new/" /etc/network/interfaces
  ifdown eth0
  ifup eth0
  
  ping=$(ping -c 3 8.8.8.8 | tail -2 | head -1 | awk '{print $4}')
  
  if [ $ping -gt 0 ]; then
    echo $new >> good.list
  fi
  
  old=$new
done

cat good.list | while read address
do
  sed -i "s/$old/$address/" /etc/network/interfaces
  ifdown eth0
  ifup eth0
  
  ping=$(ping -c 3 8.8.8.8 | tail -2 | head -1 | awk '{print $4}')
  
  if [ $ping -gt 0 ]; then
    break
  fi
done

exit 0

cat /etc/network/interfaces | tail -3 | head -1 | awk '{print $2}'

awk -v iface=eth0 '($1==«iface»){IF=$2}(IF==iface&&$1==«address»){print $2}' /etc/network/interfaces
Лишние проверки убрать по вкусу.

ping -c 3 8.8.8.8 | tail -2 | head -1 | awk '{print $4}'

ping -c 3 -q && echo $new >> good.list не проще?

Вопрос: на что заменить ifdown и ifup чтобы оно заработало.

ip link set dev eth0 up address $address
ip route change default via $gateway

AITap ★★★★★ ()
Ответ на: комментарий от AITap

Извиняюсь что долго не отвечал, тестировал.

awk -v iface=eth0 '($1==«iface»){IF=$2}(IF==iface&&$1==«address»){print $2}' /etc/network/interfaces

Лучше но я пока с awk плохо знаком.

ping -c 3 -q && echo $new >> good.list не проще?

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

ip route change default via $gateway

В скрипе выдает ошибку RTNETLINK answers: File exists.

Спасибо за ответ.

На данный момент:

#!/bin/bash

address=$(awk -v iface=eth0 '($1=="iface"){IF=$2}(IF==iface&&$1=="address"){print $2}' /etc/network/interfaces | grep -Eo '([0-9]{1,3}\.){3}')

for ((i=3; i <= 254; i++))
do
  ip=$address$i
  route del default && sleep 0.2s
  route add default gateway $ip
  
  ping=$(ping -c 2 8.8.8.8 | tail -2 | head -1 | awk '{print $4}')
  
  if [ $ping -gt 0 ]; then
    echo $ip >> good.list
  fi  
done


cat good.list | while read gw
do
  route del default && sleep 0.2s
  route add default gateway $gw
  
  ping=$(ping -c 3 8.8.8.8 | tail -2 | head -1 | awk '{print $4}')
  
  if [ $ping -gt 0 ]; then
    oldgw=$(cat /etc/network/interfaces | tail -3 | head -1 | awk '{print $2}')
    sed -i "s/$oldgw/$gw/" /etc/network/interfaces
    break
  fi
done

exit 0

Не хватает только вытаскивания шлюза с помощью awk и строки прогресса. Но я так и не понял как оно работает, завтра доделаю.

p.s. Просрано 7 часов, полученный опыт бесценен :)

insfel ()
Ответ на: комментарий от AITap

Почитал ман по awk, все ровно не понимаю как оно работает, видимо слишком тупой. Да и интерфейс у меня всё-ровно один(отмазался). Решил больше не трогать, работает и хрен с ним.

#!/bin/bash

mv good.list > good.list.old
ares=$(grep 'address' /etc/network/interfaces | grep -Eo '([0-9]{1,3}\.){3}')

for ((i=3; i <= 254; i++))
do
  ip=$ares$i
  
  route del default && sleep 0.1s
  route add default gateway $ip
  
  ping=$(ping -c2 8.8.8.8 | grep '%' | awk '{print $4}')
  
  if [ $ping -gt 0 ]; then
    echo $ip >> good.list
  fi  
done

cat good.list | while read gw
do
  route del default && sleep 0.1s
  route add default gateway $gw
  
  ping=$(ping -c2 8.8.8.8 | grep '%' | awk '{print $4}')
  
  if [ $ping -gt 0 ]; then
    old_gw=$(grep 'gateway' /etc/network/interfaces | awk '{print $2}')
    sed -i "s/$old_gw/$gw/" /etc/network/interfaces
    break
  fi
done

exit 0
insfel ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.