Справка - Поиск - Участники - Войти - Регистрация
Полная версия: Пишем скрипты для облегчения администрирования.
Частный клуб Алекса Экслера > Наши сети притащили > Администрирование сетей
Страницы: 1, 2, 3, 4, 5
Rps
18 июля 2011, 14:10
ps можно использовать?
Tamerlan
18 июля 2011, 15:15

Chief написал: Нет, разово я бы и руками воткнул.

Тогда, как уже сказали выше, делаешь батником банальную проверку наличия loopback и дальше, если ничего не найдено, вызываешь devcon install. Потом, если нужна дополнительная настройка, задаешь параметры адаптера. Если укажешь детали ТЗ поконкретнее, могу накидать пример кода скрипта.
Tamerlan
18 июля 2011, 15:20

Rps написал: ps можно использовать?

Не думаю, что это хорошая идея на XP.
Rps
18 июля 2011, 16:07

Tamerlan написал:
Не думаю, что это хорошая идея на XP.

Зависит от конкретной корпоративной сети и их правил.
Chief
18 июля 2011, 17:24

Rps написал: Зависит от конкретной корпоративной сети и их правил.

Да блин, какая корпоративка, тут для домашней работы дирекции и бухгалиерииfrown.gif

Tamerlan написал: Если укажешь детали ТЗ поконкретнее

Ярлык, пользователь запускает (не вводя ничего или только пароль), подключается батник, проверяющий наличие колььца и, в случае оного отсутствия, его создающего. Далее, после определения кольца - ему присваевается левый серый адрес (с необходимым роутером), после чего подключается ssh-тунель, по которому пользователь, минуя все вводы, попадает на сервер данных.
Кроме первого пункта - создания лупбекинтерфейса, а при его наличия игнорирования действия, я со всем справлюсь, но эти действия пока меня в ступор вбивают...
Tamerlan
18 июля 2011, 19:10

Chief написал: Ярлык, пользователь запускает (не вводя ничего или только пароль), подключается батник, проверяющий наличие колььца и, в случае оного отсутствия, его создающего. Далее, после определения кольца - ему присваевается левый серый адрес (с необходимым роутером)

Для английской винды навскидку получилось следующее:
CODE
wmic nic where Name='Microsoft Loopback Adapter' get NetConnectionID | find /i "local"
if %errorlevel% NEQ 0 call :loopback_install
for /f "tokens=1-4" %%i in ('wmic nic where Name^="Microsoft Loopback Adapter" get NetConnectionID ^| find /i "local"') do (
netsh interface ip set address name="%%i %%j %%k %%l" static 10.10.10.5 255.255.255.0 10.10.10.1 1
)
goto :EOF

:loopback_install
devcon install %WINDIR%\Inf\Netloop.inf *MSLOOP
:test
sleep 5
wmic nic where Name='Microsoft Loopback Adapter' get NetConnectionID | find /i "local"
if %errorlevel% NEQ 0 goto :test
goto :EOF

Этот скрипт проверяет, установлен ли в системе Microsoft Loopback Adapter, если не установлен, то устанавливает его, и потом присваивает ему соответствующие IP, Subnet, Gateway. Если нужен DNS, то в скрипт добавится еще одна строчка вида:
CODE
netsh interface ip set dns name="%%i %%j %%k %%l" static 10.10.10.2
Tamerlan
18 июля 2011, 19:15
Да, на всякий случай... На пользовательской тачке, разумеется, должен присутствовать devcon, скопированный куда-нибудь в исполняемый путь. Айпишники, написанные в скрипте, разумеется, тоже нужно заменить своими. smile.gif
Chief
18 июля 2011, 19:25

Tamerlan написал: Для английской винды

Боюсь будет везде русская, пользователи то простые...frown.gif
Tamerlan
18 июля 2011, 20:43

Chief написал:
Боюсь будет везде русская, пользователи то простые...frown.gif

Для русской стоит попробовать так:
CODE
wmic nic where Name='Microsoft Loopback Adapter' get NetConnectionID | find /i "local"
if %errorlevel% NEQ 0 call :loopback_install
for /f "tokens=1-5" %%i in ('wmic nic where Name^="Microsoft Loopback Adapter" get NetConnectionID ^| find /i "local"') do (
netsh interface ip set address name="%%i %%j %%k %%l %%m" static 10.10.10.5 255.255.255.0 10.10.10.1 1
)
goto :EOF

:loopback_install
devcon install %WINDIR%\Inf\Netloop.inf *MSLOOP
:test
sleep 5
wmic nic where Name='Microsoft Loopback Adapter' get NetConnectionID | find /i "local"
if %errorlevel% NEQ 0 goto :test
goto :EOF
Chief
28 июля 2011, 10:36

Tamerlan написал: Для русской стоит попробовать так:

Спасибо, для ХР заработало. А для семерки можно что то подобное сделать?
alibek
15 февраля 2013, 14:20
Накатал скриптик, мониторящий статус сетевого узла. Может кому-нибудь пригодиться.
Делал еще аналогичный для Windows, но он потерялся, а заново сочинить сложно (в отличии от никсов, в командной строке Windows всякие вычисления сложнее делать, я уже забыл, как изворачивался).

CODE

#!/usr/local/bin/bash

PING="ping -q -o -t 3 -c 3"
HOST=10.1.128.4
STATE=9
EXIT=0
CNT=0

function clock()
{
       date +"%Y-%m-%d %H:%M:%S"
}

function print()
{
       MSG=$1
       PREV=$2
       i=${#PREV}
       while [ $i -gt 0 ]
       do
               echo -n -e "\b"
               let i-=1
       done
       echo -n -e "$MSG"
}

echo "*"
echo "Host: $HOST"
echo "Started at: `clock`"
echo -n "."

trap "EXIT=1" HUP INT
while [ $EXIT -eq 0 ]
do
       $PING $HOST>/dev/null 2>&1
       if [ $? -eq 0 ]
       then
               if [ $STATE -eq 1 ]
               then
                       if [ $CNT -eq 0 ]
                       then
                               echo -n "time "
                       fi
                       let TIMER=`date +%s`-T0
                       print $TIMER $S0
                       let CNT+=1
                       S0=$TIMER
               else
                       echo ""
                       echo -n "$HOST, `clock`, state: ONLINE;  "
                       STATE=1
                       let CNT=0
                       T0=`date +%s`
                       S0=""
               fi
               sleep 1
       else
               if [ $STATE -eq 0 ];
               then
                       if [ $CNT -eq 0 ]
                       then
                               echo -n "time "
                       fi
                       let TIMER=`date +%s`-T0
                       print $TIMER $S0
                       let CNT+=1
                       S0=$TIMER
               else
                       echo ""
                       echo -n "$HOST, `clock`, state: OFFLINE; "
                       STATE=0
                       let CNT=0
                       T0=`date +%s`
                       S0=""
               fi
       fi
done

echo ""
echo "*"
echo "Finished at: `clock`"
Klopp
13 марта 2013, 17:46

alibek написал: в отличии от никсов, в командной строке Windows всякие вычисления сложнее делать

А вот для никсов хочется smile.gif Удаление файлов в каталоге, к которым не обращались N дней + подсчёт размера удалённого. Желательно с форматированием в Mb. С первой частью вопросов нет, это одна строка. А вот считать? В голову пока лезет только смотреть du до и после...
Chief
13 марта 2013, 17:52

Klopp написал: А вот для никсов хочется    Удаление файлов в каталоге, к которым не обращались N дней + подсчёт размера удалённого.

Удаление не сложно - find это позволяет.
Как пример из мана
-amin n
True if the difference between the file last access time and the
time find was started, rounded up to the next full minute, is n
minutes.
-atime n[smhdw]
If no units are specified, this primary evaluates to true if the
difference between the file last access time and the time find
was started, rounded up to the next full 24-hour period, is n
24-hour periods.

If units are specified, this primary evaluates to true if the
difference between the file last access time and the time find
was started is exactly n units. Possible time units are as fol-
lows:

s second
m minute (60 seconds)
h hour (60 minutes)
d day (24 hours)
w week (7 days)

Any number of units may be combined in one -atime argument, for
example, ``-atime -1h30m''. Units are probably only useful when
used in conjunction with the + or - modifier.

Подсчет таки сложнее, но есть подозрение, что через awk это сделать не сложно, хотя надо покопаться в том же find, хотя может действительно проще через du и awk? Простые решения всегда правильнее...smile.gif
alibek
13 марта 2013, 18:00

Klopp написал: Удаление файлов в каталоге, к которым не обращались N дней + подсчёт размера удалённого.

find, а в нем уже что нужно (удаление или еще что).
Например так:
CODE
find $DIR -mindepth 1 -maxdepth 1 -atime +20 -type d -exec du -s {}; rm -fr {} \;
Chief
13 марта 2013, 18:04

alibek написал: Например так:

А rm то зачем? В самом find есть ключ delete, работает, проверенно...
type d - не будет искать файлы, нужен type f
Klopp
13 марта 2013, 18:06

alibek написал: -exec du {}

А как отсюда суммировать?
alibek
13 марта 2013, 18:17

Chief написал: А rm то зачем?

Чтобы перед удалением что-нибудь сделать, например посчитать размер.


Klopp написал: А как отсюда суммировать?

Терминал уже закрыл.
Примерно так: переслать по конвееру на cut (чтобы получить только размеры), затем либо просуммировать внешней утилитой, либо прямо в шелл-скрипте в цикле (используя let).

Как вариант, можно вообще с помощью find просто получить список файлов (используя -print), а затем полученный список посчитать и удалить.
Klopp
13 марта 2013, 18:19

alibek написал: просуммировать внешней утилитой

На перле я и так всё это в несколько строчек сделаю, от поиска с удалением до подсчёта, безо всяких утилит smile.gif Интересно в шелле потренироваться...
Klopp
13 марта 2013, 21:26
Да фиг с ним, лень думать tongue.gif

CODE
#!/usr/bin/perl

use strict;
use File::Find;

die "Usage: $0 path days\n" unless $ARGV[1];
my ($td,$sz) = (time()-(60*60*24*$ARGV[1]));
find( sub { my @fs = stat $_; unlink $_, $sz += $fs[7] if -f $_ and $fs[8] < $td; }, $ARGV[0] );
print "$sz\n";
alibek
30 сентября 2015, 10:15
Иногда приходится настраивать различные сетевые железки.
Когда железка одна, алгоритм простой - захожу на заводской IP-адрес (предварительно добавив на ПК secondary IP-адрес из той же подсети), меняю на железке IP-адрес на нормальный, делаю остальные настройки.
Когда железок много (и все с одинаковым заводским IP) и они подключаются в коммутатор/хаб, нужно либо подключать и настраивать их по одной, либо делать статическую привязку ARP-записи.
Раньше делал это вручную, но когда железок стало много, надоело и сделал небольшой скриптик (BAT-файл):
CODE

@echo off
set IP=192.168.1.2 #или %1, если IP-адрес передавать аргументом
if "*"=="%IP%*" goto :EOF
arp -d >nul
ping -n 1 %IP% >nul
for /F "usebackq delims=" %%z in (`arp -a ^| find "%IP%"`) do @set ARP=%%z
if "*"=="%ARP%*" (
echo No ARP-entry for %IP%
goto :EOF
)
for /F "tokens=1,2,3*" %%a in ("%ARP%") do @set MAC=%%b
echo ARP-entry for %IP%: [%MAC%]
arp -s %IP% %MAC%

(набирал по памяти, возможны синтаксические ошибки)
Chief
30 октября 2015, 06:38
Диалог для работы с пользователями довекот.
Писал давно, потому типа миднайтевского интерфейса. Да и сейчас я другое писать не буду. Ну и выход из после каждой операции - возврат и дописывание выхода мне было лень дописывать, мне легче стрелку вверх нажать и нажать ентер.
Пути подправлять надо. Пользователи - локалпассворд.

DIALOG=${DIALOG=dialog}
tempfile1=`mktemp 2>/dev/null` || tempfile1=/tmp/test1$$
trap "rm -f $tempfile1" 0 1 2 5 15

$DIALOG --backtitle "Работа с почтовыми ящиками" \
--clear --shadow \
--menu "Действия над почтовыми ящиками " 20 61 5 \
"1" "Добавить пользователя" \
"2" "Сменить пароль" \
"3" "Удалить пользователя" \
"4" "Вывести список почтовых ящиков" 2> $tempfile1



retval=$?

choice=`cat $tempfile1`

case $choice in
1)
clear
touch /tmp/dialog1.tmp
tempfile2=/tmp/dialog1.tmp
trap "rm -f $tempfile2" 0 1 2 5 15
$DIALOG --title "" --clear \
--inputbox "Введите имя почтового ящика:" 16 51 2> $tempfile2

LOGIN=`cat $tempfile2`
cp $tempfile2 /root/tmp2
TEMP_LOGIN=`cat /usr/local/etc/dovecot/dovecot.passwd | awk -F\: '$1=="'"$LOGIN"'" {print $0} '` > /dev/null
echo $TEMP_LOGIN
if [ -z $TEMP_LOGIN ]
then
if [ -z $LOGIN]
then
touch /tmp/dialog3.tmp
tempfile4=/tmp/dialog3.tmp
$DIALOG --shadow --msgbox "Имя пользователя должно содержать не менее одного символа!!!" 8 50 2> $tempfile4
echo
exit 0
fi

touch /tmp/dialog2.tmp
tempfile3=/tmp/dialog2.tmp
trap "rm -f $tempfile3" 0 1 2 5 15
$DIALOG --title "" --clear --shadow \
--inputbox "Введите пароль:" 16 51 2> $tempfile3
PASSWD=`cat $tempfile3`

if [ -z $PASSWD]
then
PASSWD=`pwgen -Bcn -N 1`
echo "Пароль не может быть пустым. Используется пароль " > /tmp/pass.tmp
echo $PASSWD >> /tmp/pass.tmp
touch /tmp/dialog4.tmp
tempfile5=/tmp/dialog4.tmp
$DIALOG --shadow --textbox /tmp/pass.tmp 8 80 2> $tempfile5
rm /tmp/pass.tmp
fi
PASS=`dovecotpw -p $PASSWD -u $LOGIN`
echo $LOGIN:$PASS:26:6 >> /usr/local/etc/dovecot/dovecot.passwd
pw useradd $LOGIN -s /sbin/nologin -d /dev/null
/usr/local/etc/rc.d/dovecot restart > /dev/null

else
echo "Почтовый ящик существует!"
exit 0


fi
;;
2)
clear

tempfile2=/tmp/dialog1.tmp
trap "rm -f $tempfile2" 0 1 2 5 15
$DIALOG --title "" --clear --shadow \
--inputbox "Введите имя почтового ящика:" 16 51 2> $tempfile2


LOGIN=`cat $tempfile2`

TEMP_LOGIN=`cat /usr/local/etc/dovecot/dovecot.passwd | awk -F\: '$1=="'"$LOGIN"'" {print $1} '` > /dev/null
if [ -z $TEMP_LOGIN ]
then
touch /tmp/dialog3.tmp
tempfile4=/tmp/dialog3.tmp
$DIALOG --shadow --msgbox "Такого почтового ящика не существует!!!" 8 50 2> $tempfile4
echo
exit 0
else
echo "Введите пароль:"
read PASSWD



if [ -z $PASSWD]
then
PASSWD=`pwgen -Bcn -N 1`
echo "Пароль не может быть пустым. Используется пароль " > /tmp/pass.tmp
echo $PASSWD >> /tmp/pass.tmp
touch /tmp/dialog4.tmp
tempfile5=/tmp/dialog4.tmp
$DIALOG --shadow --textbox /tmp/pass.tmp 8 100 2> $tempfile5
rm /tmp/pass.tmp
fi
PASS=`dovecotpw -p $PASSWD -u $LOGIN`
cat /usr/local/etc/dovecot/dovecot.passwd | awk -F\: '$1!="'"$LOGIN"'" {print $0} ' >> /root/$LOGIN.list
mv /root/$LOGIN.list /usr/local/etc/dovecot/dovecot.passwd
/usr/local/etc/rc.d/dovecot restart > /dev/null
fi
;;
3)



tempfile2=/tmp/dialog1.tmp
trap "rm -f $tempfile2" 0 1 2 5 15
$DIALOG --title "" --clear \
--shadow --inputbox "Введите имя почтового ящика:" 16 51 2> $tempfile2


LOGIN=`cat $tempfile2`


TEMP_LOGIN=`cat /usr/local/etc/dovecot/dovecot.passwd | awk -F\: '$1=="'"$LOGIN"'" {print $0} '` > /dev/null
if [ -z $TEMP_LOGIN ]
then
touch /tmp/dialog3.tmp
tempfile4=/tmp/dialog3.tmp
$DIALOG --shadow --msgbox "Такого почтового ящика не существует!!!" 8 50 2> $tempfile4
echo
exit 0
else
cat /usr/local/etc/dovecot/dovecot.passwd | awk -F\: '$1!="'"$LOGIN"'" {print $0} ' >> /root/$LOGIN.list
pw userdel $LOGIN
mv /root/$LOGIN.list /usr/local/etc/dovecot/dovecot.passwd
/usr/local/etc/rc.d/dovecot restart > /dev/null
fi
;;

4)
cat /usr/local/etc/dovecot/dovecot.passwd | awk -F\: '$1!="'"$LOGIN"'" {print $1 | "sort"} ' > /root/mailbox.list

tempfile2=/tmp/dialog1.tmp
trap "rm -f $tempfile2" 0 1 2 5 15
$DIALOG --title "" --clear --shadow \
--textbox /root/mailbox.list 50 51 2> $tempfile2
echo ""
exit 0



esac

rm -f /tmp/dialog*.*
rm -f /root/*.list

echo ""
echo ""
echo ""
echo ""
echo ""
Эта версия форума - с пониженной функциональностью. Для просмотра полной версии со всеми функциями, форматированием, картинками и т. п. нажмите сюда.
Invision Power Board © 2001-2017 Invision Power Services, Inc.
модификация - Яро & Серёга
Хостинг от «Зенон»Сервера компании «ETegro»