Что нового

Автоматическое получение ip адреса компьютеров

Timerlan

Новичок
Сообщения
93
Репутация
0
Уважаемые гуру. Помогите пожалуйста написать скрипт. Я хочу чтоб скрипт запускаешь и он сканировал все компы и записывал ip адреса в файл. После это мне на email отправлял это файл. Просто поймите на работе около 500 компов и ip адреса у них динамические и каждый раз меняются а мне нужно их знать. Можно ли такое реализовать???
 

Belfigor

Модератор
Локальный модератор
Сообщения
3,608
Репутация
941
Код:
@IPAddress1
@IPAddress2
@IPAddress3
@IPAddress4


Что-то слабо похоже что 500 компов будут отчитываться о своих текущих динамически меняющихся ip адресах кому-то на мыло в мирных целях :3. А можно конкретнее, зачем это?
 

Mur

Осваивающий
Сообщения
132
Репутация
32
OffTopic:
Мне, например, три компьютера отчитываются, просто потому что мне лень спускаться и смотреть "что там". С согласия владельцев поставили VNC и скрипт как раз таки. И то, мне уже и таким образом лень смотреть...
А 500 компьютеров на одну мылу - это самоубийство. +сколько же это почтовых адресов надо зарегистрировать, для отправки писем, чтобы не было конфликтов...
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
Timerlan сказал(а):
Просто поймите на работе около 500 компов и ip адреса у них динамические и каждый раз меняются а мне нужно их знать.

А почему бы не назначить статические адреса?
 
Автор
T

Timerlan

Новичок
Сообщения
93
Репутация
0
мне это нужно для того чтоб обновлять специализированные проги. А то как то в лом ходить и там в ручную устанавливать. а статику нельзя ставить по политике безопасности. я же не хочу чтоб мне с каждого компа приходил отчет я хочу чтоб он все записывал в один файл и отправлял мне.
 
Автор
T

Timerlan

Новичок
Сообщения
93
Репутация
0
можно нет че нибудь такое реализовать???
 

Yuri

AutoIT Гуру
Сообщения
737
Репутация
282
Нечто вот такое получилось. :smile:
Код:
#include <file.au3>
#include <Array.au3>
$NetView = "comp_list.txt"
RunWait(@ComSpec & " /c " & 'net view >'&$NetView, "", @SW_HIDE)
Dim $aRecords
_FileReadToArray($NetView,$aRecords)
FileOpen($NetView, 2)
TCPStartup()
For $i=1 To $aRecords[0]	
	If StringInStr($aRecords[$i], "\\") Then
		$aRecords[$i] = StringReplace($aRecords[$i], "\\", "")
		$aRecords[$i] = StringReplace($aRecords[$i], " ", "")
		$LocalIP = TCPNameToIP($aRecords[$i])
		FileWriteLine($NetView, $aRecords[$i] & " >>> " & $LocalIP & @CRLF)
	EndIf
Next
FileClose($NetView)
ShellExecute($NetView, "", "", "", @SW_MAXIMIZE)
 
Автор
T

Timerlan

Новичок
Сообщения
93
Репутация
0
Спасибо дружище. Скриптик отличный. Тока вот есть небольшой баг какой то он выводить на некоторых компах тока имя компа, а ip не хочет писать. в чем проблема не можешь помочь добить ее. И еще одно просьба как сделать так чтоб он мне этот созданный файл отправлял на емаил. А ваще идеально было бы если я этот скрипт забил в шедуллер и если есть какие то изменение в ip адресации то он мне отправлял этот файл на емаил. Допустим он первый раз просканировал ip адреса и создал файл и отправил мне на емаил на следущий день он также сканирует сравнивает его с тем файлом если есть какие то изменение то опять отправляет мне на емаил, а если нету ни каких изменений то ни чего не отправляет??? а можно Еще как то указывать диапазон ip адресов???


Добавлено:
Сообщение автоматически объединено:

Примерно он выводит мне вот так
RT2005 >>> 10.29.163.6
RT213RT3932 >>>
RT238 >>> 10.29.163.11
RT240ПетровПетрАлексеевич>>>
RT28021 >>> 10.29.163.14
RT2812 >>> 10.29.163.23
RT2814Иванов Иван Иванович >>>
RT2816 >>> 10.29.163.16
RT2835A >>> 10.29.163.8
RT2847 >>> 10.29.163.21
RT2704СмирновИванВладимирович >>>

Вот видишь на некоторых компах нет IP адреса и везде нет где написаны фамилии,имена. Получается где написано описание компа там он не выводить IP адрес
 

Yuri

AutoIT Гуру
Сообщения
737
Репутация
282
он выводить на некоторых компах тока имя компа, а ip не хочет писать
Это означает, что данный ПК выключен, или просто не в сети,
обрыв кабеля например. Проверял на своей сети.
Еще как то указывать диапазон ip адресов???
Можно. Но это уже будет другой скрипт.
 
Автор
T

Timerlan

Новичок
Сообщения
93
Репутация
0
нет, я щас проверил компы которые якобы выключены, а на самом деле они не выключены нормально пингуются, сеть есть значит в чем то другом проблема может в скриптике че исправить надо???
 

inververs

AutoIT Гуру
Сообщения
2,135
Репутация
465
Timerlan
Стандартный пинг имени компьютера возвращает ip адрес. Сделайте по аналогии ;)
 
Автор
T

Timerlan

Новичок
Сообщения
93
Репутация
0
не мне так не удобно будет, пинговать надо будет каждый комп у которого не высветился IP адрес это в плане времени не экономно


Добавлено:
Сообщение автоматически объединено:

Слушай а у тебя там не прописано случайно в скрипте типа он ip адреса выводит которые получены тока через DHCP, а если в ручную прописаны то он их типа не видит???
 

Yuri

AutoIT Гуру
Сообщения
737
Репутация
282
Ничего такого не прописано.
В моей сети все адреса статические и все видит.
Скрипт работает на основе net view ОС Windows +
Код:
TCPNameToIP()

Код:
#include <file.au3>
Global $NetView = "comp_list.txt"
RunWait(@ComSpec & " /c " & 'net view >'&$NetView, "", @SW_HIDE) ;выполнить команду CMD "net view" и поместить результат в текстовый файл
Dim $aRecords
_FileReadToArray($NetView,$aRecords);прочитать этот текстовый файл в массив
FileOpen($NetView, 2)
TCPStartup()
For $i=1 To $aRecords[0];убрать все лишнее, оставить только имана ПК
	If StringInStr($aRecords[$i], "\\") Then
		$aRecords[$i] = StringReplace($aRecords[$i], "\\", "")
		$aRecords[$i] = StringReplace($aRecords[$i], " ", "")
		$LocalIP = TCPNameToIP($aRecords[$i]);подставляем имена ПК И НА ОСНОВЕ ИМЕНИ ПК ПОЛУЧАЕМ ИХ IP функцией TCPNameToIP
		FileWriteLine($NetView, $aRecords[$i] & " >>> " & $LocalIP & @CRLF)
	EndIf
Next
FileClose($NetView)

FileCopy($NetView, "C:\", 1); копируем файл в корень диска С
;и лотравляем его на e-mail
;###########################################################
$str = "http://schemas.microsoft.com/cdo/configuration/"
$hMAIL = ObjCreate ("CDO.Message")
    With $hMAIL
        .From = 'от_кого@mail.ru';поставить свое
        .To = 'Кому@mail.ru';поставить свое
        .Subject = 'Список ПК в сети'
        .TextBody = 'Добрый день, принимайте данные'
        .AddAttachment ('C:\comp_list.txt')
    EndWith
    With $hMAIL.Configuration.Fields
        .Item ($str & "sendusing") = 2
        .Item ($str & "smtpserver") = 'smtp.mail.ru'
        .Item ($str & "smtpauthenticate") = 1
        .Item ($str & "sendusername") = 'от_кого@mail.ru';поставить свое
        .Item ($str & "sendpassword") = 'пароль';поставить свое
        .Item ($str & "smtpserverport") = '2525'
        .Update
    EndWith
$hMAIL.Send
;###############################################################
ShellExecute($NetView, "", "", "", @SW_MAXIMIZE)
 
Автор
T

Timerlan

Новичок
Сообщения
93
Репутация
0
а не можешь да разобраться в чем проблема???


Добавлено:
Сообщение автоматически объединено:

я понял в чем проблема у кого короче описание компа есть у тех не показывается IP адрес. Я просто протестил у себя на компе тоже поставил описание и он мне не показал IP адрес, потом убрал описание он заново начал показвать IP адрес. Как эту проблему решить можно


Добавлено:
Сообщение автоматически объединено:

А ты во втором скрипте чет исправил да?
 

Yuri

AutoIT Гуру
Сообщения
737
Репутация
282
А ты во втором скрипте чет исправил да?
Добавил отправку на e-mail
а не можешь да разобраться в чем проблема???
Наверное в обработке полученного файла командой net view

Вызови консоль CMD, выполни команду
Код:
net view  >comp_test.txt
И покажи содержимое файла comp_test.txt


Добавлено:
Сообщение автоматически объединено:

Разобрался вроде.
Дал своему ПК описание "Компьютер в гостинной" и скрипт не правильно
отработал. Переделал обработку текстового файла. Думал уж не обойтись без рег. выражений, я их не знаю, но выкрутился. :-[
Вот этот фрагмент
весь замени соответственно.
Код:
For $i=1 To $aRecords[0]
	If StringInStr($aRecords[$i], "\\") Then
		$aRecords[$i] = StringReplace($aRecords[$i], "\\", "")		
		$NamePC = StringSplit($aRecords[$i], " ")
		$LocalIP = TCPNameToIP($NamePC[1])
		FileWriteLine($NetView, $NamePC[1] & " >>> " & $LocalIP & @CRLF)
	EndIf
Next
 
Автор
T

Timerlan

Новичок
Сообщения
93
Репутация
0


Добавлено:
Сообщение автоматически объединено:

ооо дружище огромное спасибо помогло.

Код:
FileCopy($NetView, "C:\", 1); копируем файл в корень диска С
;и лотравляем его на e-mail

А где тут указывать Email то? Он же просто копирует на диск с и все
 

Yuri

AutoIT Гуру
Сообщения
737
Репутация
282
А если более внимательнее присмотреться?
Код:
.From = 'от_кого@mail.ru';поставить свое
.To = 'Кому@mail.ru';поставить свое
.Item ($str & "sendusername") = 'от_кого@mail.ru';поставить свое
.Item ($str & "sendpassword") = 'пароль';поставить свое
 
Верх