vb6 - как получить имя удаленного компьютера по заданному IP-адресу - PullRequest
1 голос
/ 28 февраля 2011

как я могу получить имя удаленного компьютера на основе данного IP-адреса в vb6?Можно ли как-нибудь вывести список компьютеров, связанных с текущим компьютером?

Ответы [ 3 ]

3 голосов
/ 28 февраля 2011

Если обратный поиск DNS делает то, что вы хотите, это может помочь.Этот пример упрощает обработку результатов DNS, но должен помочь вам начать, и этого может быть достаточно:

Option Explicit

Private Const DNS_TYPE_PTR = &HC
Private Const DNS_QUERY_STANDARD = &H0
Private Const DnsFreeRecordListDeep = 1&

Private Enum DNS_STATUS
    ERROR_BAD_IP_FORMAT = -3&
    ERROR_NO_PTR_RETURNED = -2&
    ERROR_NO_RR_RETURNED = -1&
    DNS_STATUS_SUCCESS = 0&
End Enum

Private Type VBDnsRecord
    pNext As Long
    pName As Long
    wType As Integer
    wDataLength As Integer
    Flags As Long
    dwTTL As Long
    dwReserved  As Long
    prt As Long
    others(9) As Long
End Type

Private Declare Function DnsQuery Lib "Dnsapi" Alias "DnsQuery_A" ( _
    ByVal Name As String, _
    ByVal wType As Integer, _
    ByVal Options As Long, _
    ByRef aipServers As Any, _
    ByRef ppQueryResultsSet As Long, _
    ByVal pReserved As Long) As Long

Private Declare Function DnsRecordListFree Lib "Dnsapi" ( _
    ByVal pDnsRecord As Long, _
    ByVal DnsFreeRecordListDeep As Long) As Long

Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" ( _
    ByRef pTo As Any, _
    ByRef uFrom As Any, _
    ByVal lSize As Long)

Private Declare Function StrCopyA Lib "kernel32" Alias "lstrcpyA" ( _
    ByVal retval As String, _
    ByVal PTR As Long) As Long

Private Declare Function StrLenA Lib "kernel32" Alias "lstrlenA" ( _
    ByVal PTR As Long) As Long

Public Function IP2HostName(ByVal IP As String, ByRef HostName As String) As Long
    Dim Octets() As String
    Dim OctX As Long
    Dim NumPart As Long
    Dim BadIP As Boolean
    Dim lngDNSRec As Long
    Dim Record As VBDnsRecord
    Dim Length As Long
    'Returns DNS_STATUS Enum values, otherwise a DNS system error code.

    IP = Trim$(IP)
    If Len(IP) = 0 Then IP2HostName = ERROR_BAD_IP_FORMAT: Exit Function
    Octets = Split(IP, ".")
    If UBound(Octets) <> 3 Then IP2HostName = ERROR_BAD_IP_FORMAT: Exit Function
    For OctX = 0 To 3
        If IsNumeric(Octets(OctX)) Then
            NumPart = CInt(Octets(OctX))
            If 0 <= NumPart And NumPart <= 255 Then
                Octets(OctX) = CStr(NumPart)
            Else
                BadIP = True
                Exit For
            End If
        Else
            BadIP = True
            Exit For
        End If
    Next
    If BadIP Then IP2HostName = ERROR_BAD_IP_FORMAT: Exit Function

    IP = Octets(3) & "." & Octets(2) & "." & Octets(1) & "." & Octets(0) & ".IN-ADDR.ARPA"

    IP2HostName = DnsQuery(IP, DNS_TYPE_PTR, DNS_QUERY_STANDARD, ByVal 0, lngDNSRec, 0)
    If IP2HostName = DNS_STATUS_SUCCESS Then
        If lngDNSRec <> 0 Then
            CopyMemory Record, ByVal lngDNSRec, LenB(Record)

            With Record
                If .wType = DNS_TYPE_PTR Then
                    Length = StrLenA(.prt)
                    HostName = String$(Length, 0)
                    StrCopyA HostName, .prt
                Else
                    IP2HostName = ERROR_NO_PTR_RETURNED
                End If
            End With
            DnsRecordListFree lngDNSRec, DnsFreeRecordListDeep
        Else
            IP2HostName = ERROR_NO_RR_RETURNED
        End If
    'Else
        'Return with DNS error code.
    End If
End Function

Обратите внимание, однако, что он не обрабатывает имена NetBIOS.

0 голосов
/ 02 декабря 2013

САМАЯ ПРОСТАЯ ТЕХНИКА, КОГДА-ЛИБО

Чтобы отправить имя компьютера, Сделайте это:

Создать текстовое поле,

Измените его многострочное свойство на true.

После этого в свойстве text этого текстового поля напишите:

echo %computername% >> C:\temp.txt

затем, используя Fileinput, введите текстовый файл и введите текстовый файл C:\temp.txt.

Если вы хотите использовать это для отправки через winsock или LAN, отправьте текстовое поле с помощью winsock1.sendata

Выполнено

0 голосов
/ 28 февраля 2011

Согласно этой статье поддержки Microsoft , стандартные функции GetHostByAddr() должны это делать.К сожалению, я не могу найти примеров того, как сделать вызов GetHostByAddr в VB6, но, возможно, кто-то другой может помочь с этой частью.С другой стороны, вы можете запустить инструмент командной строки, например nslookup:

bensonk@hunter ~/Desktop/cont $ nslookup 64.34.119.12
Server:     208.67.222.222
Address:    208.67.222.222#53

Non-authoritative answer:
12.119.34.64.in-addr.arpa   name = stackoverflow.com.

Этот пример был запущен на машине с Linux, но эта же команда отлично подойдет для Windows.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...