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"

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

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

Настройка консоли 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).