В данном разделе находится общая информация.
В данном разделе находятся примеры различных Linux shell скриптов.
В данном разделе находятся примеры различных скриптов на WSH.
В данном разделе находятся материалы по разным темам.

Правильный CSS!

Для корректного отображения страницы, рекомендуется использовать браузер поддерживающий JavaScript.

Для навигации пользуйтесь боковым меню и кнопками "Описание" и "Подробно".

Linux скрипт для определения имени пользователя залогиненного на целевом Windows компьютере в домене.

С версии 1.3 скрипт распространяется в составе пакета модулей: Консоль управления: managecomps.sh.

Основные особенности работы:

  • Для администраторов гетерогенной сети (Linux+samba-client, Windows);
  • Определение логина пользователя, работающего на целевом Windows ПК в домене, по IP адресу или имени ПК;
  • Определение имени ПК по логину пользователя, работающего на этом ПК;
  • Используется nmblookup с ключем -B, требуется samba-client;
  • Автоматически определяет список доступных широковещательных адресов, с возможностью выбора;
  • Запуск из командной строки или с dialog/kdialog.

Пример запуска:

> useroncomp.sh -I 10.1.0.1
Домен: MYDOMAIN
Пользователь: PETROV_PP
Копьютер: HOST1
		

Пример Linux скрипта для определения имени пользователя залогиненного на целевом Windows компьютере в домене.

(Скачать файл можно будет здесь managecomps-current.tar.gz. ЗЫ Не тыкать! Жать правой кнопкой: сохранить ссылку как...)

Условия:

Используй: useroncomp.sh [-I|-U IP|Name] [-d|-k] [-o] [-h]

  • -I -IP адрес или имя компьютера
  • -d -использовать dialog
  • -k -использовать kdialog
  • -o -сокращенный вывод
  • -U -искать по пользователю
  • -h -показать помощь

Обязательные параметры: IP адрес или имя компьютера, если не указано, предложит ввести.
Необязательные параметры: dialog/kdialog, если не указан, используется вывод в терминал.
Пример: useroncomp.sh -I 10.1.0.1 -k

Текст useroncomp.sh:

#!/bin/sh
#
#Version: 1.3
#Copyright 2009-2010 Konstantin Nadezhdin (nk_rec AT mail DOT ru)
#
#This program is free software: you can redistribute it and/or modify
#it under the terms of the GNU General Public License as published by
#the Free Software Foundation, either version 3 of the License, or
#(at your option) any later version.
#
#This program is distributed in the hope that it will be useful,
#but WITHOUT ANY WARRANTY; without even the implied warranty of
#MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
#GNU General Public License for more details.
#
#You should have received a copy of the GNU General Public License
#along with this program.  If not, see <http://www.gnu.org/licenses/>.
#
progname="Кто на компе"
nonet="(127\.|169\.254\.)"
ethpre="eth"
nexts=""
echotype="e"
output="normal"
searchtype=""
c=1
broadcast=""
for i in "$@"; do
	case $i in
		-I) nexts="fI";;
		-d) echotype="d";;
		-k) echotype="k";;
		-o) output="oneline";;
		-U) nexts="fU";;
		-b) nexts="fb";;
		-h) echo -e "$0 [-I|-U IP|Name] [-d|-k] [-b broadcast_IP] [-h]\n\
			\t-I -IP адрес или имя компьютера\n\
			\t-d -использовать dialog\n\
			\t-k -использовать kdialog\n\
			\t-o -сокращенный вывод\n\
			\t-U -искать по пользователю\n\
			\t-b -использовать указанный широковещательный адрес\n\
			\t-h -показать помощь" && exit;;
		*)
			case $nexts in
				fI) name="$i"; searchtype="comp"; nexts="";;
				fU) name="$i"; searchtype="user"; nexts="";;
				fb) broadcast="$i"; nexts="";;
			esac
		;;
	esac
done

echo_t(){
case $1 in
	d) dialog --backtitle "$progname" --title " Результат " --msgbox "$2" 8 50;;
	k) kdialog  --caption "$progname" --title " Результат " --msgbox "$2";;
	e) echo $3 -e "$2";;
esac
}

read_t(){
case $1 in
	d) tmpfile="/tmp/input.$$"; dialog --backtitle "$progname" --title " Запрос " --inputbox "$2" 12 50 "$3" 2>$tmpfile; read < $tmpfile; rm -f $tmpfile;;
	k) tmpfile="/tmp/input.$$"; kdialog  --caption "$progname" --title " Запрос " --inputbox "$2" --    "$3"  >$tmpfile; read < $tmpfile; rm -f $tmpfile;;
	e) echo -e "$2";read;;
esac	
}

getname() {
	name="$1"
	if [ "$name" = "" ]; then
		while [ "$searchtype" = "" ]; do
			read_t $echotype "Укажи -I:[IP или Имя компьютера] или -U:[Имя пользователя]:" "-I:"
			case ${REPLY%:*} in
				"") echo_t $echotype "IP или Имя компьютера или Имя пользователя не выбрано. Отмена."; exit 1;;
				-I) searchtype="comp";;
				-U) searchtype="user";;
				*) echo_t $echotype "Не указан тип -I или -U. Попробуй еще раз, или нажми Ввод для выхода."; searchtype="";;
			esac
		done
		name="${REPLY#*:}"
		test "$name" = "" -o "$name" = "${REPLY%:*}" && { echo_t $echotype "IP или Имя не указан. Отмена."; exit 1; }
	fi
	case $searchtype in
	comp)
		IP=$name
		user=""
		if echo "$name" | grep -q -E "^([0-9]{1,3}\.){3}[0-9]{1,3}$"; then
			echo "$name" | grep -q -E "^((2(5[0-4]|[0-4][0-9])|1[0-9]{2}|[1-9]?[0-9])\.){3}(2(5[0-4]|[0-4][0-9])|1[0-9]{2}|[1-9]?[0-9])$"; ret=$?
			test $ret -eq 0 || { echo_t $echotype "$name похож на IP, но вне диапазона доступных IP или имеет лишние нули. Отмена."; exit 1; }
		else
			IP=$(nmblookup -B $broadcast $name#00 | awk 'and(/<00>/,!/^'$nonet'/) {print $1}')
			test "$IP" = "" && { echo_t $echotype "Компьютер: $name - не найден."; exit 1; }
			
		fi
		;;
	user)
		IP=""
		user=$name
		if echo "$name" | grep -q -E "^([0-9]{1,3}\.){3}[0-9]{1,3}$"; then
			echo_t $echotype "$name похож на IP, но должно быть Имя пользователя . Отмена."; exit 1
		else
			IP=$(nmblookup -B $broadcast -R $user#03 | awk '/<03>/ {print $1}')
			test "$IP" = "" && { echo_t $echotype "Пользователь: $user - не найден."; exit 1; }
		fi
		;;
	esac
}

getbrd() {
	#$1 - ether name prefix (eth)
	if echo "$broadcast" | grep -q -E "^([0-9]{1,3}\.){3}[0-9]{1,3}$"; then
		echo "$broadcast" | grep -q -E "^((2(5[0-4]|[0-4][0-9])|1[0-9]{2}|[1-9]?[0-9])\.){3}(2(5[0-5]|[0-4][0-9])|1[0-9]{2}|[1-9]?[0-9])$"; ret=$?
		test $ret -eq 0 || { echo_t $echotype "$broadcast похож на IP, но вне диапазона доступных IP или имеет лишние нули. Отмена."; exit 1; }
	else
		broadcasts=$(ip -f inet addr show label $1* | awk '$3 == "brd" {print $4}')
		echostr="Какой широковещательный адрес использовать? (Выбери номер: 1, 2 и т.д.)"
		i=1
		for broadcast in $broadcasts; do
			echostr="$echostr\n$i: $broadcast"
			let i=$i+1
		done
		brdnum=0
		while [ $brdnum -eq 0 ]; do
			read_t $echotype "$echostr" "1"; brdnum="$REPLY"
			test "$brdnum" = "" && { echo_t $echotype "Широковещательный адрес не выбран. Отмена."; exit 1; }
			echo "$brdnum" | grep -q -E "^[1-9][0-9]*$" || brdnum=$i
			test $brdnum -ge $i && { echo_t $echotype "Некорректный ввод. Попробуй еще раз, или нажми Ввод для выхода."; brdnum=0; }
		done
		i=1
		for broadcast in $broadcasts; do
			test $brdnum -eq $i && break
			let i=$i+1
		done
	fi
}

getbrd "$ethpre"
getname "$name"

cr=$(ping -c $c $IP 2>/dev/null | awk '/received/ {gsub(/^.*transmitted, | received,.*$/,""); print}')
#cr=1
if [ "$c" = "$cr" ]; then
	all=$(nmblookup -A $IP | awk 'or(and(/<(00|03)>/,!/<GROUP>/),/<1e>.+<GROUP>/) {gsub(/<|>/,"",$2); print $2":"$1}')
	test "$all" = "" && { echo_t $echotype "$IP не отвечает."; exit 1; }
	comp=$(echo "$all" | awk '/^00:/ {sub(/^00:/,""); comps=comps"|"$0} END {print comps}')
	comp=${comp#|}
	test "$searchtype" = "user" || { user=$(echo "$all" | awk 'and(/^03:/,!/:('$comp')/) {sub(/^03:/,""); users=users"|"$0} END {print users}'); user=${user#|}; }
	domain=$(echo "$all" | awk '/^1e:/ {sub(/^1e:/,""); print}')
	case $output in
		normal) echo_t $echotype "Домен: $domain\nПользовател(ь/и): $user\nКопьютер: $comp";;
		oneline) echo_t $echotype "$domain\\\\$user@$comp";;
	esac
else
	echo_t $echotype "$IP не пингуется: отпралено $c, получено $cr пакетов"	
	exit 1
fi

		

Что нового в этой версии:

Версия 1.3 (2010-09-20 12:37:13):
Версия 1.3 (Птн Сен 10 2010):
- Исправлено некорректное отображение (в некоторых случаях) символа "\" при запуске с ключем -o;
- Скоректировано отображение пользователей, если их больше одного. Теперь так: USER1|USER2|USER3.
Версия 1.2 (Втр Сен 7 2010):
- Добавлен ключ для указания широковещательного адреса при запуске из командной строки.
Версия 1.1 (Чтв Сен 2 2010):
- Добавлен поиск ПК по имени пользователя;
- Добавлен выбор широковещательного адреса.
Версия 1.0 (Втр Авг 31 2010):
- Первый релиз.

Yandex.Metrika

Page modification: Втр Сен 21 16:32:21 MSD 2010
Используется Quanta+ 3.5.10 Under the GPL v2 license.