Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?
Гродненский Форум
09 Июнь 2024, 14:18:07
Новости, реклама:
   Главная   Новости Гродно Помощь Игры Календарь Войти Регистрация   Меню
Гродненский Форум > Компьютеры > Домашние сети
(Модераторы: SAlex, Limpa, fergus) > Тема:

Модернизация "сетевого окружения". #2

Страниц  :   Вниз
  Печать  
Автор Тема: Модернизация "сетевого окружения". #2  (Прочитано 1560 раз)
0 Пользователей и 1 Гость смотрят эту тему.
svin0
Почетный гродненец
*****

Репутация: +90/-1
Offline Offline

Пол: Мужской
Сообщений: 2088


Просмотр профиля
« : 08 Март 2010, 17:31:31 »

Далее приведу вариант модификации скрипта, расположенного на опеннете. Вместо двух рабочих групп оставлена одна -> не требуется второй обозреватель, добавлены две сети, скрипт поправлен для работы на linux вместо freebsd. В моем случае имеется роутер с несколькими интерфейсами, объединяющими несколько сетей. В "Сетевом окружении" видны все ПК и без скрипта, но для машин с одной стороны имена машин других сторон преобразуются в адреса 0.0.0.0. Роутер виден и доступен из всех сетей, поэтому его имя оставим неизменным и не будем добавлять в список сканируемых (далее - максимальный адрес 253 из 254-х).

scan139.pl
Код:
#!/usr/bin/perl
use IO::Socket;
$NetADDR1   = "192.168.0.";    # Задаем подсеть
$NetADDR2   = "192.168.253.";  # Задаем подсеть
$NetADDR3   = "10.99.93.";     # Задаем подсеть
$port       = 139;             # Порт - 139
$proto      = "tcp";           # протокол TCP
$Timeout    = 0.01;            # таймаут сессии (в сетях с потерями можно увеличить до 0.02-0.1с)

### подпрограмма вывода строки в формате файла browse.dat ###
sub add_to_list {  
   $HostNAME = `/home/smb_scan/resolv.sh $HostADDR`;         # резолвим имя компа из IP-адреса
   $HostNAME =~ s/.dnet.\n//;                                # отбрасываем доменную часть
   print '"';
   print $HostADDR;                                          # вставляем ИП-адрес
   print '"';
   print " 40011003 ";                                       # вставляем код
   print '"';
   print $HostNAME;                                          # вставляем описание - имя из DNS
   print '"';
   print ' "DNET" ';                                         # вставляем рабочую группу
   print "\n";
}

### формируем первые 2 статические строки, которые описывают рабочие группы и их броузеры ###
print '"DNET" c0001000 "10.99.93.254" "DNET" ';
print "\n";
print '"STRG-SRV" 40849a03 "Storage server" "DNET" ';
print "\n";

$i = 1;
while ( $i < 111 ) {                            # сканировать все ИП-адреса до 110
 $HostADDR = $NetADDR2 руб. 63 коп.i;                      # текущий ИП-адрес          
### создаем сокет (TCP-коннект на 139 порт) ###  
 my $sock = IO::Socket::INET->new(PeerAddr=> $HostADDR,  
 PeerPort => $port,
 Proto => $proto,
 Timeout => $Timeout ) && add_to_list;          # в случае успеха выполнить подпрограмму
 close($sock);                                  # закрыть сокет
$i++;                                           # и т.д. коннект на все ИП от 1 до 110
}

$i = 1;
while ( $i < 254 ) {                            # сканировать все ИП-адреса до 253
 $HostADDR = $NetADDR5 руб. 26 коп.i;                      # текущий ИП-адрес          
### создаем сокет (TCP-коннект на 139 порт) ###  
 my $sock = IO::Socket::INET->new(PeerAddr=> $HostADDR,  
 PeerPort => $port,
 Proto => $proto,
 Timeout => $Timeout ) && add_to_list;          # в случае успеха выполнить подпрограмму
 close($sock);                                  # закрыть сокет
$i++;                                           # и т.д. коннект на все ИП от 1 до 253
}

$i = 1;
while ( $i < 254 ) {                            # сканировать все ИП-адреса до 253
 $HostADDR = $NetADDR7 руб. 89 коп.i;                      # текущий ИП-адрес          
### создаем сокет (TCP-коннект на 139 порт) ###  
 my $sock = IO::Socket::INET->new(PeerAddr=> $HostADDR,  
 PeerPort => $port,
 Proto => $proto,
 Timeout => $Timeout ) && add_to_list;          # в случае успеха выполнить подпрограмму
 close($sock);                                  # закрыть сокет
$i++;                                           # и т.д. коннект на все ИП от 1 до 253
}

browser_update.pl
Код:
#!/usr/bin/perl

`/home/smb_scan/scan139.pl > /var/cache/samba/new_list`;    # сканируем и кидаем список в new_list

sleep(10);                                                  # ждать 10 сек

`chattr -i /var/cache/samba/browse.dat`;                    # снимаем флаг "неизменяемый"
`cp /var/cache/samba/new_list /var/cache/samba/browse.dat`; # заменяем browse.dat содержимым new_list
`chattr +i /var/cache/samba/browse.dat`;                    # устанавливаем флаг "неизменяемый"

Не нашел решения через perl, поэтому добавляется еще один файл:

resolv.sh
Код:
#!/bin/bash
/usr/bin/nslookup $1 | /bin/grep name | /usr/bin/awk -F " " '{ print $4 }'

Ничего сложного, в статье об оригинальном скрипте всё подробно расписано. Добавлю, что выигрыш выборов главного обозревателя обеспечивают следующие строки:
Код:
os level = 255
local master = yes
preferred master = yes

И никаких WINS. Если будут вопросы - пишите. В данный момент скрипт работает в одной из локальных компьютерных сетей.
Записан
Artoha
just a nix-user
Гродненец
**

Репутация: +0/-0
Offline Offline

Сообщений: 70


IT-шаман

Просмотр профиля WWW
« Ответ #1 : 08 Март 2010, 20:30:27 »

пасиб
Записан

svin0
Почетный гродненец
*****

Репутация: +90/-1
Offline Offline

Пол: Мужской
Сообщений: 2088


Просмотр профиля
« Ответ #2 : 04 Июль 2010, 14:39:52 »

Поправка для читабельности browse.dat.
После
Код:
$HostNAME =~ s/.dnet.\n//;                                # отбрасываем доменную часть
добавить
Код:
$HostNAME =~ s/.\n//;                                     # отбрасываем точку, если есть
Записан
Страниц  :   Вверх
  Печать  
 
Перейти в:  

Войти
Войдите, чтобы добавить комментарий

Войдите через социальную сеть

Имя пользователя:
Пароль:
Продолжительность сессии (в минутах):
Запомнить:
Забыли пароль?

Контакт
Powered by MySQL Powered by PHP Мобильная версия
Powered by SMF 1.1.20
SMF © 2006-2024, Simple Machines
Simple Audio Video Embedder
| Sitemap
Valid XHTML 1.0! Valid CSS!
Страница сгенерирована за 0,103 секунд. Запросов: 21.