Страница: 1 |
Ты знаешь как можно узнать ip машины в сети (в локалке)? Подскажите...
копирайт не мой. объявления Option Explicit '********************************** Function HostByName(sHost As String) As String Private Function InetAddrLongToString(Address As Long) As String Function HostByAddress(ByVal sAddress As String) As String Public Sub WinsockInit() Использование On Error Resume Next Если надо намылю полный пример Намыль плиз Но, мне надо несколько другое. Допустим есть сеть. Есть я. Мне нужно узнать ip всех компов этой сети. Причем я не знаю имена машин. Короче как получить инфу о домене и т.д. спосибо за помощь Он тебе и накатал это. Узнаешь маску подсети, сканируешь весь диапазон IP. Если определяет имя машины - есть такой IP, если No Dns Entry - значит нету. Проблема в том, что немного притормаживает при сканировании отсутствующих адресов. Если не влом использовать OCX - приклей dsSocket. Там для этого есть методы Lookup. Ставишь TimeOut на минимум - и валяй. Быстрее, конечно, пользоваться средствами Windows. Просто с ARP-таблицами не слишком удобно работать... Расскажи поподробней что за средства виндовс и что за осх. Где взять про них инфу? А спомощью этого кода, действительно слишком долго обрабатываюстя не существующие ip. Как-то можно процесс ускорить. Да и еще, что значит "узнай маску подсети и просканируй" - как это просканируй? заранее благодарю vfrc Да я тебе уже, в принципе, все сказал. Маска подсети - строка типа 255.255.255.0 или 255.255.0.0 и т.п. зависит от твоей сети. Для всей сети она одна. Например, если маска твоей сети - 255.255.255.0, то диапазон IP адресов (к примеру, для локалки) - 192.168.0.0 - 192.168.0.255 (последний IP - broadcast). Следовательно, выполнив вышеприведенную прогу для этих IP (цикл), получишь имена всех сушествующих компов в сети (если, конечно, тебя не фильтрует Firewall и на компе не отключен NetBios). Насчет OCX - я говорил про dssocket.ocx, это ActiveX контрол, куда более удобный и обладающий большими возможностями, чем стандартный winsock. С ним все это делается в три строчки, но придется его таскать с собой. Если хочешь сделать совсем дубово, то используй Ping и Arp (команды Windows). Скажем, запускаешь 254 пинга с минимальным TimeOut и числом пакетов (для каждого IP). Ждешь, когда они закроются (у меня это занимало меньше 15 сек). Затем ARP -a >outfile.txt. Это, конечно, неудобно, зато показывает IP ВСЕХ машин сети, даже скрытых (Firewall, Virtual Machine и т.п.). Очень полезно, если хочешь отследить гада To LamerOnLine: Где взять этот dssocket.ocx Заранее спасибо У меня был на диске VB6. А что, в инете поиск уже отменили? Ну, давай свой e-mail, намылю... 2 LamerOnLine : намыль его мне плиз. в нете порыся, нащёл не крякнутые (за деньги америкосовские). А денег и так на пиво не хватает... ) В общем намыль ежели не в лом. Есле несложно мне-бы хотелось посмотреть исходник такой программы. Страница: 1 |
Вопрос: Как просканировать сеть, чтобы увидеть ip машин?
Добавлено: 16.09.03 15:40
Автор вопроса: [tsc]vfrc
Ответы
Всего ответов: 10
Номер ответа: 1
Автор ответа:
crackoff
ICQ: 156165990
Вопросов: 12
Ответов: 229
Профиль | | #1
Добавлено: 16.09.03 18:52
Public Const SOCKET_ERROR = -1
Public Const AF_INET = 2
Public Const PF_INET = AF_INET
Public Const MAXGETHOSTSTRUCT = 1024
Public Const SOCK_STREAM = 1
Public Const MSG_PEEK = 2
Private Type SockAddr
sin_family As Integer
sin_port As Integer
sin_addr As String * 4
sin_zero As String * 8
End Type
Private Type T_WSA
wVersion As Integer
wHighVersion As Integer
szDescription(0 To 255) As Byte
szSystemStatus(0 To 128) As Byte
iMaxSockets As Integer
iMaxUdpDg As Integer
lpVendorInfo As Long
End Type
Dim WSAData As T_WSA
Type Inet_Address
Byte4 As String * 1
Byte3 As String * 1
Byte2 As String * 1
Byte1 As String * 1
End Type
Public IPStruct As Inet_Address
Public Type T_Host
h_name As Long
h_aliases As Long
h_addrtype As Integer
h_length As Integer
h_addr_list As Long
End Type
'** API Functions Definitions:
Public Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hwnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long
Declare Sub CopyMemory Lib "kernel32.dll" Alias "RtlMoveMemory" (Dest As Any, Src As Any, ByVal cb&
Declare Function gethostbyaddr Lib "wsock32.dll" (addr As Long, ByVal addr_len As Long, ByVal addr_type As Long) As Long
Declare Function inet_addr Lib "wsock32.dll" (ByVal addr As String) As Long
Declare Function GetHostByName Lib "wsock32.dll" Alias "gethostbyname" (ByVal HostName As String) As Long
Declare Function GetHostName Lib "wsock32.dll" Alias "gethostname" (ByVal HostName As String, HostLen As Long) As Long
Declare Function WSAStartup Lib "wsock32.dll" (ByVal a As Long, b As T_WSA) As Long
Declare Function WSACleanUp Lib "wsock32.dll" Alias "WSACleanup" () As Integer
Dim s As String
Dim p As Long
Dim Host As T_Host
Dim ListAddress As Long
Dim ListAddr As Long
Dim Address As Long
s = String(64, 0)
sHost = sHost + Right(s, 64 - Len(sHost))
p = GetHostByName(sHost)
If p = SOCKET_ERROR Then
Exit Function
Else
If p <> 0 Then
CopyMemory Host.h_name, ByVal p, Len(Host)
ListAddress = Host.h_addr_list
CopyMemory ListAddr, ByVal ListAddress, 4
CopyMemory Address, ByVal ListAddr, 4
HostByName = InetAddrLongToString(Address)
Else
HostByName = "No DNS Entry"
End If
End If
End Function
CopyMemory IPStruct, Address, 4
InetAddrLongToString = CStr(Asc(IPStruct.Byte4)) + "." + CStr(Asc(IPStruct.Byte3)) + "." + CStr(Asc(IPStruct.Byte2)) + "." + CStr(Asc(IPStruct.Byte1))
End Function
Dim lAddress As Long
Dim p As Long
Dim HostName As String
Dim Host As T_Host
lAddress = inet_addr(sAddress)
p = gethostbyaddr(lAddress, 4, PF_INET)
If p <> 0 Then
CopyMemory Host, ByVal p, Len(Host)
HostName = String(256, 0)
CopyMemory ByVal HostName, ByVal Host.h_name, 256
If HostName = "" Then HostByAddress = "Unable to Resolve Address"
HostByAddress = Left(HostName, InStr(HostName, Chr(0)) - 1)
Else
HostByAddress = "No DNS Entry"
End If
End Function
WSAStartup &H101, WSAData
End Sub
WinsockInit
NAME = HostByAddress(IP.Text)
IP= HostByName(IP.Text)
WSACleanUp
Номер ответа: 2
Автор ответа:
[tsc]vfrc
Вопросов: 1
Ответов: 2
Профиль | | #2
Добавлено: 16.09.03 21:56
Номер ответа: 3
Автор ответа:
LamerOnLine
ICQ: 334781088
Вопросов: 108
Ответов: 2822
Профиль | | #3
Добавлено: 17.09.03 09:50
Номер ответа: 4
Автор ответа:
[tsc]vfrc
Вопросов: 1
Ответов: 2
Профиль | | #4
Добавлено: 17.09.03 15:31
Номер ответа: 5
Автор ответа:
LamerOnLine
ICQ: 334781088
Вопросов: 108
Ответов: 2822
Профиль | | #5
Добавлено: 18.09.03 09:38
Номер ответа: 6
Автор ответа:
ZeroX
ICQ: 220401330
Вопросов: 47
Ответов: 406
Профиль | | #6
Добавлено: 18.09.03 11:08
Номер ответа: 7
Автор ответа:
LamerOnLine
ICQ: 334781088
Вопросов: 108
Ответов: 2822
Профиль | | #7
Добавлено: 18.09.03 12:31
Номер ответа: 8
Автор ответа:
ZeroX
ICQ: 220401330
Вопросов: 47
Ответов: 406
Профиль | | #8
Добавлено: 18.09.03 13:12
zerox@front.ru
Номер ответа: 9
Автор ответа:
Justas
ICQ: 259418212
Вопросов: 24
Ответов: 325
Web-сайт:
Профиль | | #9
Добавлено: 19.09.03 00:39
Номер ответа: 10
Автор ответа:
Virtual
Вопросов: 10
Ответов: 30
Профиль | | #10
Добавлено: 11.10.03 23:37