博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
vb中从域名得到IP及从IP得到域名
阅读量:5101 次
发布时间:2019-06-13

本文共 4989 字,大约阅读时间需要 16 分钟。

'vb中从域名得到IP及从IP得到域名      Private Const WS_VERSION_REQD = &H101Private Const WS_VERSION_MAJOR = WS_VERSION_REQD \ &H100 And &HFF&Private Const WS_VERSION_MINOR = WS_VERSION_REQD And &HFF&Private Const MIN_SOCKETS_REQD = 1Private Const SOCKET_ERROR = -1Private Const WSADescription_Len = 256Private Const WSASYS_Status_Len = 128Private Type HOSTENT   hname As Long   hAliases As Long   hAddrType As Integer   hLength As Integer   hAddrList As LongEnd TypePrivate Type WSADATA   wversion As Integer   wHighVersion As Integer   szDescription(0 To WSADescription_Len) As Byte   szSystemStatus(0 To WSASYS_Status_Len) As Byte   iMaxSockets As Integer   iMaxUdpDg As Integer   lpszVendorInfo As LongEnd TypePrivate Declare Function gethostbyaddr Lib "WSOCK32.DLL" (addr As Any, ByVal _byteslen As Integer, addrtype As Integer) As LongPrivate Declare Function WSAGetLastError Lib "WSOCK32.DLL" () As LongPrivate Declare Function WSAStartup Lib "WSOCK32.DLL" (ByVal _        wVersionRequired&, lpWSAData As WSADATA) As LongPrivate Declare Function WSACleanup Lib "WSOCK32.DLL" () As LongPrivate Declare Function gethostbyname Lib "WSOCK32.DLL" (ByVal _        hostname$) As LongPrivate Declare Sub RtlMoveMemory Lib "KERNEL32" (hpvDest As Any, _        ByVal hpvSource&, ByVal cbCopy&)Function hibyte(ByVal wParam As Integer)    '获得整数的高位   hibyte = wParam \ &H100 And &HFF&End FunctionFunction lobyte(ByVal wParam As Integer)    '获得整数的低位   lobyte = wParam And &HFF&End FunctionFunction SocketsInitialize()   Dim WSAD As WSADATA   Dim iReturn As Integer   Dim sLowByte As String, sHighByte As String, sMsg As String      iReturn = WSAStartup(WS_VERSION_REQD, WSAD)      If iReturn <> 0 Then      MsgBox "Winsock.dll 没有反应."      End   End If      If lobyte(WSAD.wversion) < WS_VERSION_MAJOR Or (lobyte(WSAD.wversion) = WS_VERSION_MAJOR And hibyte(WSAD.wversion) < WS_VERSION_MINOR) Then      sHighByte = Trim$(str$(hibyte(WSAD.wversion)))      sLowByte = Trim$(str$(lobyte(WSAD.wversion)))      sMsg = "Windows Sockets版本 " & sLowByte & "." & sHighByte      sMsg = sMsg & " 不被winsock.dll支持 "      MsgBox sMsg      End   End If      If WSAD.iMaxSockets < MIN_SOCKETS_REQD Then      sMsg = "这个系统需要的最少Sockets数为 "      sMsg = sMsg & Trim$(str$(MIN_SOCKETS_REQD))      MsgBox sMsg      End   End If   End FunctionSub SocketsCleanup()   Dim lReturn As Long      lReturn = WSACleanup()      If lReturn <> 0 Then      MsgBox "Socket错误 " & Trim$(str$(lReturn)) & " occurred in Cleanup "      End   End IfEnd SubSub Form_Load()    '初始化Socket    SocketsInitializeEnd SubPrivate Sub Form_Unload(Cancel As Integer)    '清除Socket    SocketsCleanupEnd SubPrivate Function getip(name As String) As String   Dim hostent_addr As Long   Dim host As HOSTENT   Dim hostip_addr As Long   Dim temp_ip_address() As Byte   Dim i As Integer   Dim ip_address As String      hostent_addr = gethostbyname(name)      If hostent_addr = 0 Then      getip = ""                     '主机名不能被解释      Exit Function   End If      RtlMoveMemory host, hostent_addr, LenB(host)   RtlMoveMemory hostip_addr, host.hAddrList, 4      ReDim temp_ip_address(1 To host.hLength)   RtlMoveMemory temp_ip_address(1), hostip_addr, host.hLength      For i = 1 To host.hLength      ip_address = ip_address & temp_ip_address(i) & "."   Next   ip_address = Mid$(ip_address, 1, Len(ip_address) - 1)      getip = ip_addressEnd FunctionPrivate Sub Command1_click()    Dim str As String    str = getip(Text1.Text)    If str = "" Then        Text2.Text = "主机名不能被解释"    Else        Text2.Text = str    End IfEnd SubPrivate Function getname(addrstr As String) As String    Dim hostent_addr As Long    Dim host As HOSTENT    Dim addr(0 To 50) As Byte    Dim addrs As String    Dim hname(1 To 50) As Byte    Dim str As String    Dim i As Integer, j As Integer    Dim temp_int As Integer    Dim byt As Byte    str = Trim$(addrstr)    i = 0    j = 0    Do        temp_int = 0        i = i + 1        Do While Mid$(str, i, 1) >= "0" And Mid$(str, i, 1) <= "9" And i <= Len(str)            temp_int = temp_int * 10 + Mid$(str, i, 1)            i = i + 1        Loop        If temp_int <= 255 Then            addr(j) = temp_int            j = j + 1        End If        Loop Until Mid$(str, i, 1) <> "." Or i > Len(str) Or temp_int > 255    If temp_int > 255 Then        getname = "地址非法"        Exit Function    End If    hostent_addr = gethostbyaddr(addr(0), j, 2)    If hostent_addr = 0 Then        getname = "此地址无法解析"        Exit Function    End If    RtlMoveMemory host, hostent_addr, LenB(host)    RtlMoveMemory hname(1), host.hname, 50    j = 51    For i = 1 To 50        If hname(i) = 0 Then            j = i        End If        If i >= j Then            hname(i) = 32        End If    Next i    getname = Trim$(StrConv(hname, vbUnicode))End FunctionPrivate Sub Command2_Click()    Dim name As String    name = getname(Text2.Text)    If name = "" Then        name = "此地址没有域名"    End If    Text1.Text = nameEnd Sub

 

转载于:https://www.cnblogs.com/Spacecup/p/3642828.html

你可能感兴趣的文章
万能的SQLHelper帮助类
查看>>
uboot分析:uboot的启动过程分析
查看>>
tmux的简单快捷键
查看>>
springboot笔记04——读取配置文件+使用slf4j日志
查看>>
[Swift]LeetCode653. 两数之和 IV - 输入 BST | Two Sum IV - Input is a BST
查看>>
[Swift]LeetCode922.按奇偶排序数组 II | Sort Array By Parity II
查看>>
微信小程序的wxml文件和wxss文件在webstrom的支持
查看>>
Html5 离线页面缓存
查看>>
[php]在PHP中读取和写入WORD文档的代码
查看>>
WCF傻瓜模式写程序
查看>>
《绿色·精简·性感·迷你版》易语言,小到不可想象
查看>>
Java Web学习总结(13)Listener监听器
查看>>
开始Flask项目
查看>>
Ruby:多线程队列(Queue)下载博客文章到本地
查看>>
Android打包key密码丢失找回
查看>>
03 jQuery动画
查看>>
医药箱APP静态小项目
查看>>
安装使用eclipse
查看>>
VC6.0调试技巧(一)(转)
查看>>
linux命令
查看>>