Windows CMD: Поиск хостов в локальной сети

Windows CMD: Поиск хостов в локальной сети

данная штука полезна, если, например, с ноута нужно вспомнить забытый айпишник свича, и под рукой только стандартные средства. Оптимально можно найти данный айпишник с помощью одной консольной команды:

FOR /L %i IN (1,1,254) DO ping -n 1 \\192.168.0.%i | FIND /i "Reply">>c:\find_local_ip.txt

здесь каждый айпишник для адресов 192.168.0.1-254 пингуется один раз, после чего результат передается команде find, которая при отклике записывает результат в файл find_local_ip.txt

и еще один скрипт (шутка — уходя, гасите всех!) — выключает все компы в заданной подсети:

FOR /L %i in (1,1,254) DO shutdown \\192.168.0.%i

также с выходом всех пользователей (XP):

FOR /L %i in (1,1,254) DO shutdown \\192.168.0.%i /l

тоже самое для 2003 сервера:

FOR /L %i in (1,1,254) DO shutdown /r /m \\192.168.0.%i /d p:2:18

примечание: данная фича может быть запрещена локальной политикой безопасности в разделе прав пользователей, в XP shutdown встроенная команда, если ее нет, то нужно будет скачать.

иногда полезно знать, какие порты открыты на компьютере и используются в данный момент, сделать это тоже можно из командной строки:

посмотреть использующиеся порты —

netstat -an |find /i "listening"

посмотреть порты с установленными соединениями:

netstat -an |find /i "established"

с идентификаторами процессов:

netstat -ao |find /i "listening"

помнится в бесплатном пакете W2K Resource Kit была хорошая утилитка, PULIST, позволяющая посмотреть процесс, использующий порт и использующую его программу, например есть установленное соединение по 80 порту и ни один броузер не запущен, как найти программу, которая использует данный порт —

netstat -no

выдаст, что есть процесс номер 1234, использующий 80 порт,

pulist |find /i "1234"

и покажет, что это идет обновление антивируса.

By sysadmin on 28.07.2009 | Windows
Метки: , , , ,

Найти по MAC адресу IP компьютера

Как-то случайно натыкался на полезные скрипты для определения по мак адресу айпи компьютера:

такой вот коротенький батничек, пингующий группу адресов и записывающий в файлик arp_table.txt

@echo off
if exist arp_table.txt (
if exist arp_table.bak del arp_table.bak
ren arp_table.txt arp_table.bak
)
for /L %%i in (1,1,254) do (
echo 192.168.0.%%i
ping -n 1 192.168.0.%%i>nul
arp -a 192.168.0.%%i>arp_string.tmp
for /F "skip=3 tokens=*" %%j in (arp_string.tmp) do (
echo %%j|find /V "invalid">>arp_table.txt
)
)
del arp_string.tmp

и более тотальный скрипт:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
'******************************************************************************
'* File: mac2ip.vbs
'* Purpose: Finds IP of the host with given MAC address.
'* Syntax: cscript mac2ip.vbs /mac:MAC_ADDRESS /ip:IP_BLOCK [/p:pause]
'* Version: 1.0.2
'*
'* Technology: VBSCRIPT,WSH,WMI
'* Requirements: Windows XP or newer (uses Win32_PingStatus WMI class)
'*
'* Authors: 4u3u (asuhovey mtu-net ru)
'*
'******************************************************************************
Option Explicit
'On Error Resume Next
Dim objShell,strOutput,i,strMAC,objOutput,objAdapter,intPause
Dim strSTime,strIP,strNameSpace,strQuery,colAdapters,PausePattern
Dim colResult,IPPattern,MACPattern,strArpCommand,strOMAC
 
'* Matches valid MAC address
MACPattern = "^([0-9a-f][0-9a-f]-){5}([0-9a-f][0-9a-f])$"
'*Matches valid IP block
IPPattern = "^b((25[0-5]|2[0-4]d|[01]dd|d?d).){3}$"
'*Matches positive integer
PausePattern = "^d+$"
 
'****************************************
'Parse arguments
'****************************************
strOMAC = WScript.Arguments.Named("mac")
strMAC = Replace(LCase(strOMAC),":","-")
strIP = Wscript.Arguments.Named("ip")
intPause = Wscript.Arguments.Named("p")
If intPause="" Then intPause=1000
If Wscript.Arguments.Count<2 Then
Syntax()
End If
If not ArgVrf(strMAC,MACPattern) Then
WScript.Echo "ERROR: Invalid MAC: '" & strOMAC & "' Check syntax..." & VbCrLf
Syntax()
End If
If not ArgVrf(strIP,IPPattern) Then
WScript.Echo "ERROR: Invalid IP: '" & strIP & "' Check syntax..." & VbCrLf
Syntax()
End If
If not ArgVrf(intPause,PausePattern) Then
WScript.Echo "ERROR: Invalid Pause: '" & intPause & "' Must be positive integer." & VbCrLf
Syntax()
End If
 
''****************************************
'Check if script is running by cscript.
'If not, restart script using cscript.
'****************************************
Set objShell = WScript.CreateObject("WScript.Shell")
If Instr(1, WScript.FullName, "CScript", vbTextCompare) = 0 Then
objShell.Run "cmd /k cscript.exe /nologo """ & WScript.ScriptFullName & """ /mac:" &_
strOMAC & " /ip:" & strIP & " /p:" & intPause, 1, False
WScript.Quit
End If
 
'****************************************
'Check if given MAC is owned by local host
'****************************************
strNameSpace = "winmgmts:{impersonationLevel=impersonate}//./root/cimv2"
strQuery = "SELECT * FROM Win32_NetworkAdapterConfiguration WHERE IPEnabled = True"
Set colAdapters = GetObject(strNameSpace). ExecQuery(strQuery)
For Each objAdapter in colAdapters
If LCase(Replace(objAdapter.MACAddress,":","-")) = strMAC Then
WScript.Echo strOMAC & " is YOUR MAC address!"
WScript.Quit
End If
Next
 
'****************************************
'Ping all IPs in range.
'****************************************
strSTime = Now()
strQuery = "SELECT * FROM Win32_PingStatus WHERE Address = '" & strIP
For i = 1 To 254 Step 1
Set colResult = GetObject(strNameSpace). ExecQuery(strQuery & i & "'")
WScript.StdOut.Write "."
If i/51-Int(i/51)=0 Then
WScript.StdOut.WriteLine " " & Int(100*i/254) & "%"
End If
Next
WScript.Echo ". 100%" & VbCrLf & "Ping completed in " & DateDiff("s",strSTime,Now()) & " seconds." & VbCrLf
 
'****************************************
'Get IP-MAC pair from ARP cache.
'****************************************
WScript.Sleep(intPause)
strArpCommand = "%comspec% /c arp.exe -a | find /i """ & strMAC & """"
Set objOutput=objShell.Exec(strArpCommand).StdOut
WScript.Echo String(56,"=")
i=0
Do While Not objOutput.AtEndOfStream
i=i+1
strOutput = objOutput.ReadLine
WScript.Echo StrOMAC & " is " & RTrim(Left(LTrim(strOutput),15))
Loop
If i=0 Then
WScript.Echo strOMAC & " was NOT FOUND" &_
" on the local network" & VbCrLf &_
"Either host is unreachable or " & strIP &_
"xxx is not" & VbCrLf & "your local network."
End If
WScript.Echo String(56,"=")
 
'****************************************
'Subroutines
'****************************************
'*Syntax
Sub Syntax()
Dim s
s = "Finds IP of the host with given MAC address." & VbCrLf & VbCrLf
s = s & "SYNTAX: cscript /nologo " & UCase(WScript.ScriptName) &_
" /mac:MAC_ADDRESS /ip:IP_BLOCK [/p:pause]" & VbCrLf & VbCrLf
s = s & " MAC_ADDRESS MAC address to search for. MAC_ADDRESS" & VbCrLf
s = s & " is in XX-XX-XX-XX-XX-XX format. Both" & VbCrLf
s = s & " ':' and '-' delimiters allowed." & VbCrLf
s = s & " IP_BLOCK First three octets of local ip range to" & VbCrLf
s = s & " scan. E.g. '192.168.0.' Only /24 subnets" & VbCrLf
s = s & " are supported in current version." & VbCrLf
s = s & " pause Pause after ping in milliseconds." & _
VbCrLf & " Default is 1000 (1 second)" & VbCrLf & VbCrLf
s = s & "Example:" & VbCrLf
s = s & " cscript /nologo " & UCase(WScript.ScriptName) &_
" /mac:01-23-45-67-89-AB /ip:192.168.0." & VbCrLf
WScript.Echo s
WScript.Quit 1
End Sub
 
'*Arguments validation
Function ArgVrf(arg,pattern)
Dim objRegExp
Set objRegExp = New RegExp
objRegExp.IgnoreCase = true
objRegExp.Pattern = pattern
ArgVrf = objRegExp.Test(arg)
Set objRegExp = Nothing
End Function
 
'****************************************
'End of script
'****************************************
By sysadmin on 18.06.2009 | Windows
Метки: , , , , , , , ,

Настройка консоли Windows XP

ано или поздно каждый пользователь сталкивается с необходимостью использования командной строки. Более того, в некоторых случаях решить задачу оказывается гораздо проще и удобнее с помощью текстовых инструкций, а для определенных команд вообще не существует эквивалента в графическом интерфейсе.

Так что чем раньше вы овладеете освоитесь с командной строкой, тем для вас же и лучше. А теперь нажимайте Пуск > Выполнить, вводите текст cmd и жмите Enter.

Настройка

Внешний вид командной строки можно изменять. Щелкните правой кнопкой мыши по строке заголовка окна и выберите пункт Properties (это окно можно также запустить нажатием Alt + «Пробел» + P). Откроется окно с четырьмя вкладками, на которых будут доступны опции изменения настроек программы. Если вам не нравится стандартный черный экран командной строки, то на вкладке Color вам предлагается выбрать цвет экрана и текста либо из 16 стандартных цветов, для которых имеется соответствующие образцы, либо задав числовое значение цвета в формате RGB.

На вкладке Layout настраивается размер окна и экранного буфера. Если в ранних ОС MS-DOS и Windows размер экрана оставался неизменным — 25 строк в высоту и 80 символов в длину, и для вывода большего количества строк приходилось добавлять команду

|more

, то в системах NT и более поздних можно просто задать достаточно большой размер буфера экрана и пользоваться полосой прокрутки, что гораздо удобнее.

Текст в окне командной строки

Для копирования и вставки текста в окно командной строки обычные для Windows комбинации клавиш, такие как Ctrl+C, Ctrl+V, работать не будут. Для извлечения текста из буфера обмена вам придется вызвать меню, щелкнув правой кнопкой мыши по заголовку окна, и выбрать подменю Edit. Или же просто щелкните правой кнопкой по окну. Для копирования текста из окна выберите пункт Mark и мышью выделите нужный текст. Затем либо нажмите Enter, либо в том же меню выберите Copy. Если надо вставить какой-то текст в окно командной строки, обратитесь к команде Paste.

Для повторного выполнения команды воспользуйтесь стрелками «вверх» и «вниз», позволяющими перемещаться по списку выполненных команд. Для очистки экрана от текста служит директива

cls

.

Новые утилиты командной строки

Windows XP предлагает ряд новых интересных утилит командной строки. Рассмотрим некоторые из них. Для получения справки об интересующей вас команде запустите ее с параметром /?. Для сохранения информации в текстовый файл после команды добавьте

> text.txt

Утилита Systeminfo предоставляет детальную информацию о конфигурации компьютера и его операционной системе: имя ПК, тип установленной ОС, ее версию, количество процессоров, их тактовую частоту и многое другое. Кроме всего прочего, с помощью этой утилиты вы сможете отследить, сколько времени операционная система работает без перезагрузки.

С помощью утилиты Shutdown выключается или перезагружается локальный или удаленный компьютер. Ее параметры позволяют задать время, через которое произойдет действие, пользователь получит сообщение, а также объяснение причины завершения работы.

В Windows XP появилась возможность завершать задачи из командной строки. Это можно сделать с помощью утилиты taskkill. Итак, для того чтобы завершить какую-то задачу, нужно сначала узнать ее номер, воспользовавшись утилитой tasklist. Обе упомянутые утилиты позволяют создавать фильтры для обрабатываемых задач. Например, команда

tasklist /fi "status eq not responding"

выведет на экран список всех зависших задач, а команда

taskkill /f /fi "username eq Guest"

завершит все задания, запущенные пользователем Guest.

Утилита bootcfg поможет в конфигурировании файла настроек boot.ini.

Утилита schtask позволяет создавать расписание для запуска задач периодически или в заданное время.

Для того чтобы просмотреть все открытые в системе файлы, предлагаю воспользоваться командой openfiles /query. Она позволит определить все файлы, открытые как локально, так и удаленно, а также покажет имя процесса, использующего их. Команда openfiles /disconnect отключает удаленных пользователей от общих файлов на вашем компьютере.

Напоследок рассмотрим еще одну очень интересную команду — Fsutil hardlink. Она принимает всего один параметр — create. Эта команда позволяет создавать жесткие ссылки на файлы. Жесткие ссылки позволяют одному файлу иметь несколько разных имен. Один и тот же файл может появляться в разных директориях или даже в одной директории с различными именами. И данные этого файла не могут быть удалены, пока счетчик имен файлов не будет равен нулю. Так как все ссылки указывают на один и тот же файл, программы могут открывать любую из них и изменять исходный файл.

Приведем пример использования этой команды. Допустим, имеется файл d:\1.avi, занимающий 600 Мб. Воспользовавшись командой

fsutil hardlink create d:\2.avi d:\1.avi

, вы создаете жесткую ссылку на этот файл. В результате вы получите два файла, но объем занимаемого дискового пространства не изменится. Хотя если Вы выделите эти два файла, Вам будет показано, что они занимают 1200 мегабайт. Таким образом Вы можете создать неограниченное число копий какого-либо файла, при том что на занятом пространстве диска это никак не отразится. Причем если удалить один из таких клонов, все остальные останутся без изменений. Для того чтобы уничтожить исходный файл придется удалить все жесткие ссылки на него. Но у этой команды есть ограничения: все файлы должны быть в пределах одного тома, и файловая система — только NTFS (NT File System).

By sysadmin on 12.02.2009 | Windows
Метки: , ,