Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   nslookup и список адресов (http://forum.oszone.net/showthread.php?t=276993)

bill_open 03-02-2014 09:15 2301669

nslookup и список адресов
 
Доброго времени форумчане, столкнулся с задачей не подвластной мне, был бы признателен в помощи.
имеется текстовый файл source.csv с информацией типа:
"ip адрес ресурса #1","дата и время доступа к нему"
"ip адрес ресурса #2","дата и время доступа к нему"
......

Требуется с помощью nslookup сопоставить ip c именем домена и получить файл типа:
"доменное имя","ip адрес ресурса #1","дата и время доступа к нему"
.......
если по каким то причинам nslookup не может сопоставить имя, то просто оставить поле пустым.
p.s. Можно как батник, так и скрипт powershell.

Foreigner 03-02-2014 19:39 2302032

bill_open, PowerShell:

Дата фактическая:
Код:

$csv = import-csv source.csv -header "ips", "datetime"

$result = @()
foreach ( $ip in $csv.ips ) {

    try { $hostname = [net.dns]::gethostbyaddress( $ip ).hostname }
    catch { $hostname = $null }

    $result += new-object psobject -property @{
   
        hostname = $hostname
        ipaddress = $ip
        datetime = get-date -u "%x %T"
     
}}

$result | select hostname,ipaddress,datetime | export-csv result.csv

Дата из source.csv:
Код:

$csv = import-csv source.csv -header "ips", "datetime"

$result = @()
for ( $i=0; $i -lt $csv.count; $i++ ) {

    try { $hostname = [net.dns]::gethostbyaddress( $csv.ips[$i] ).hostname }
    catch { $hostname = $null }

    $result += new-object psobject -property @{
   
        ipaddress = $csv.ips[$i]
        datetime = $csv.datetime[$i]
        hostname = $hostname
       
}}

$result | select hostname,ipaddress,datetime | export-csv result.csv


bill_open 04-02-2014 07:35 2302247

Ошибка
Код:

Не удается индексировать в массив NULL.
C:\Windows\system32\sc.ps1:11 знак:30
+        ipaddress = $csv.ips[ <<<< $i]
    + CategoryInfo          : InvalidOperation: (949:Int32) [], RuntimeException
    + FullyQualifiedErrorId : NullArray

содержимое source.csv

"213.111.111.111","2014-02-03 08:54:34"
"5.9.6.6","2014-02-03 08:54:30"
........
содержимое ~30000строк

Foreigner 04-02-2014 07:53 2302250

Цитата:

Цитата bill_open
содержимое source.csv »

У source.csv есть хэдеры? Или файл имеет именно такую структуру? УМВР:
Код:

> get-content .\result.csv                                                 
#TYPE Selected.System.Management.Automation.PSCustomObject               
"hostname","ipaddress","datetime"                                       
"unused-213.111.111.111.bilink.ua","213.111.111.111","2014-02-03 08:54:34"
"dev1.add-com.de","5.9.6.6","2014-02-03 08:54:30"


bill_open 05-02-2014 07:15 2302955

шапки нет. Уточняю, данную ошибку он выдает на каждой строке

bill_open 05-02-2014 07:44 2302963

вот другой вариант source.csv, с шапкой.
Код:

srcIP,srcPort,destIP,destPort,logTime,devID,devName,duration,sentByte,rcvdByte,direction,protoID,proto,trans,category,msg,note,idpClazz,idpAct,severity,idpSid,idpCount,spamFirstReIP,ob,obMac,user
"10.100.110.2","50296","213.180.193.3","80","2014-02-03 08:54:34","B0B2BCBB4B89","firewall","88","1382","556","[i=lan1:i=wan1:]","6","http","","Traffic Log","Traffic Log","Traffic Log","","","6","","0","","","","unknown"
"10.100.110.33","50310","5.10.8.68","80","2014-02-03 08:54:30","B0B2BCBB4B89","firewall","70","1161","685","[i=lan1:i=wan2:]","6","http","","Traffic Log","Traffic Log","Traffic Log","","","6","","0","","","","unknown"
................

powershell 2.0

Код:

Не удается индексировать в массив NULL.
C:\Windows\system32\sc.ps1:11 знак:30
+        ipaddress = $csv.ips[ <<<< $i];
    + CategoryInfo          : InvalidOperation: (0:Int32) [], RuntimeException
    + FullyQualifiedErrorId : NullArray

New-Object : Не удается проверить аргумент для параметра "Property". Аргумент пустой или имеет значение NULL. Укажите н
е пустой аргумент, не имеющий значение NULL, после чего повторите выполнение команды.
C:\Windows\system32\sc.ps1:17 знак:45
+    $result += new-object psobject -property <<<<  $object
    + CategoryInfo          : InvalidData: (:) [New-Object], ParameterBindingValidationException
    + FullyQualifiedErrorId : ParameterArgumentValidationError,Microsoft.PowerShell.Commands.NewObjectCommand

теперь так

Foreigner 05-02-2014 08:05 2302969

Цитата bill_open:
Цитата:

вот другой вариант source.csv, с шапкой.
Просто меняешь на нужный хэдер, например время берется из "logTime", а IP из "destIP":
Код:

$csv = @( import-csv source.csv )

$result = @()

for ( $i=0; $i -lt $csv.count; $i++ ) {

    try { $hostname = [net.dns]::gethostbyaddress( $csv.destip[$i] ).hostname }
    catch { $hostname = $null }
   
    $result += new-object psobject -property @{
   
        ipaddress = $csv.destip[$i];
        datetime = $csv.logtime[$i];
        hostname = $hostname
       
}}

$result | select hostname,ipaddress,datetime | export-csv result.csv


bill_open 05-02-2014 14:44 2303250

ну ни как(((
Код:

Не удается индексировать в массив NULL.
C:\Windows\system32\sc.ps1:12 знак:33
+        ipaddress = $csv.destip[ <<<< $i];
    + CategoryInfo          : InvalidOperation: (0:Int32) [], RuntimeException
    + FullyQualifiedErrorId : NullArray

пробовал менять местами строки. суть ошибки остается
Код:

.......
datetime = $csv.logtime[$i];
ipaddress = $csv.destip[$i];

->
Код:

Не удается индексировать в массив NULL.
F:\sc.ps1:12 знак:33
+        datetime = $csv.logtime[ <<<< $i];
    + CategoryInfo          : InvalidOperation: (66:Int32) [], RuntimeException
    + FullyQualifiedErrorId : NullArray

так же пробовал убрать все кавычки, ошибка осталась(((

Kazun 05-02-2014 16:02 2303311

Код:

Import-Csv source.csv -Header IP,Date |
        Select @{n="Domain";e={try{[net.dns]::GetHostEntry($_.ip).HostName} catch {"NotFound"}}},IP,Date | Export-Csv result.csv -NoTypeInformation

А в вашем, коде исправьте $csv.destip[$i] на $csv[$i].destip и $csv.logtime[$i] на $csv[$i].logtime

bill_open 06-02-2014 10:16 2303844

Код:

Import-Csv source.csv -Header IP,Date |
Select @{n="Domain";e={try{[net.dns]::GetHostEntry($_.ip).HostName} catch {"NotFound"}}},IP,Date | Export-Csv result.csv -NoTypeInformation

Этот код берет только первые два столбца-переделал под него source. Спасибо!

Цитата:

А в вашем, коде исправьте $csv.destip[$i] на $csv[$i].destip и $csv.logtime[$i] на $csv[$i].logtime
столбец hostname получается пустой((( но все равно огромное спасибо, что откликнулись!
Код:

#TYPE Selected.System.Management.Automation.PSCustomObject
"hostname","ipaddress","datetime"
,"93.158.134.3","2014-02-03 08:54:34"
,"93.158.134.3","2014-02-03 08:54:30"
........


Kazun 06-02-2014 10:38 2303855

$hostname = [net.dns]::gethostbyaddress( $csv.ips[$i] ).hostname - Поправьте здесь с $csv.ips[$i] на $csv[$i].ips


Время: 15:58.

Время: 15:58.
© OSzone.net 2001-