vb6-如何根据给定的IP地址获取远程计算机名
如何根据vb6中给定的IP地址获取远程计算机名?有什么方法可以列出链接到当前计算机的计算机列表吗?根据这一点,标准的vb6-如何根据给定的IP地址获取远程计算机名,vb6,Vb6,如何根据vb6中给定的IP地址获取远程计算机名?有什么方法可以列出链接到当前计算机的计算机列表吗?根据这一点,标准的GetHostByAddr()函数应该可以做到这一点。不幸的是,我找不到任何关于如何在VB6中执行GetHostByAddr调用的示例,但也许其他人可以提供帮助。或者,您可以运行命令行工具,如nslookup: bensonk@hunter ~/Desktop/cont $ nslookup 64.34.119.12 Server: 208.67.222.222 Addre
GetHostByAddr()
函数应该可以做到这一点。不幸的是,我找不到任何关于如何在VB6中执行GetHostByAddr
调用的示例,但也许其他人可以提供帮助。或者,您可以运行命令行工具,如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上也可以正常工作 如果反向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
选项显式
私有常量DNS_TYPE_PTR=&HC
私有常量DNS\u查询\u标准=&H0
私有常量DnsFreeRecordListDeep=1&
私有枚举DNS_状态
错误\u错误\u IP\u格式=-3&
返回的错误\u NO\u PTR\u=-2&
返回的错误\u NO\u RR\u=-1&
DNS_状态_成功=0&
结束枚举
专用类型VBDnsRecord
pNext尽可能长
pName尽可能长
wType为整数
wDataLength为整数
旗子一样长
dwTTL尽可能长
只要
prt尽可能长
其他人(9)只要
端型
专用声明函数DnsQuery Lib“Dnsapi”别名“DnsQuery_A”(_
ByVal名称作为字符串_
ByVal w类型为整数_
ByVal选项,只要_
ByRef AIPServer(如有)_
ByRef ppQueryResultsSet只要_
拜瓦尔保存的时间)一样长
私有声明函数DnsRecordListFree Lib“Dnsapi”(_
ByVal pDnsRecord,只要_
ByVal DnsFreeRecordListDeep尽可能长)尽可能长
私有声明子CopyMemory Lib“kernel32”别名“rtlmovemory”(_
ByRef pTo(如有)_
ByRef uFrom和其他人一样_
ByVal(尽可能长)
私有声明函数StrCopyA Lib“kernel32”别名“lstrcpyA”(_
ByVal retval作为字符串_
ByVal PTR As Long)As Long
私有声明函数StrLenA Lib“kernel32”别名“lstrlenA”(_
ByVal PTR As Long)As Long
公共函数IP2HostName(ByVal IP作为字符串,ByRef HostName作为字符串)的长度
Dim Octets()作为字符串
Dim-OctX与长
暗淡的NumPart如长
Dim BadIP作为布尔值
变暗lngDNSRec为长
Dim记录为VBDnsRecord
暗长
'返回DNS_状态枚举值,否则返回DNS系统错误代码。
IP=修剪$(IP)
如果Len(IP)=0,则IP2HostName=ERROR\u BAD\u IP\u FORMAT:Exit函数
八位字节=拆分(IP,“.”)
如果UBound(八位字节)3,则IP2HostName=错误\u错误\u IP\u格式:退出函数
对于OctX=0到3
如果是数字(八位字节(OctX)),则
NumPart=CInt(八位字节(OctX))
如果0有史以来最简单的技术
要发送计算机名,
这样做:
创建一个文本框
将其多行属性更改为true
之后,在该文本框的文本属性中,写下以下内容:
echo %computername% >> C:\temp.txt
然后,使用Fileinput
,输入文本文件并输入文本文件C:\temp.txt
如果要通过winsock或LAN发送,请使用winsock1.sendata
完成这是在一个受严格约束的局域网内完成的吗?除此之外,机器和IP地址之间没有1-1对应关系。另外,您是在尝试实时发现这些信息,还是从日志中发现这些信息?是的,它是通过LAN连接的,我希望在用户在我的应用程序中输入服务器IP地址时,在运行时获取计算机名。这可能吗?当你说“计算机名”时,你是指DNS系统中计算机的完全限定域名,还是指windows中的“计算机名”(即其NetBIOS名称)?windows中的计算机名,以便我可以使用它远程访问计算机。我目前正在使用UNC add访问服务器,例如\\server1您可以在UNC路径中使用IP地址。我认为在VB6中没有任何易于解析的IP->Machine name-您可能必须运行命令行命令,捕获输出(我认为在VB6中这相当容易,如果我没记错的话),并解析该输出。反向DNS确实是他想要的,因为无法使用DNS解析名称的地址会导致NetBIOS查找。:-)