vb中从域名得到IP及从IP得到域名

摘要:
'vb中从域名得到IP及从IP得到域名PrivateConstWS_VERSION_REQD=&H101PrivateConstWS_VERSION_MAJOR=WS_VERSION_REQD&H100And&HFF&PrivateConstWS_VERSION_MINOR=WS_VERSION_REQDAnd&HFF&PrivateConstMIN_SOCKETS_REQD=1PrivateCo
'vb中从域名得到IP及从IP得到域名      

Private Const WS_VERSION_REQD = &H101
Private 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 = 1
Private Const SOCKET_ERROR = -1
Private Const WSADescription_Len = 256
Private Const WSASYS_Status_Len = 128

PrivateType HOSTENT
   hname As LonghAliases As LonghAddrType As IntegerhLength As IntegerhAddrList As Long
EndType

PrivateType WSADATA
   wversion As IntegerwHighVersion As IntegerszDescription(0 To WSADescription_Len) As ByteszSystemStatus(0 To WSASYS_Status_Len) As ByteiMaxSockets As IntegeriMaxUdpDg As IntegerlpszVendorInfo As Long
EndType
Private Declare Function gethostbyaddr Lib "WSOCK32.DLL" (addr As Any, ByVal_
byteslen As Integer, addrtype As Integer) As Long
Private Declare Function WSAGetLastError Lib "WSOCK32.DLL" () As Long
Private Declare Function WSAStartup Lib "WSOCK32.DLL" (ByVal_
        wVersionRequired&, lpWSAData As WSADATA) As Long
Private Declare Function WSACleanup Lib "WSOCK32.DLL" () As Long
Private Declare Function gethostbyname Lib "WSOCK32.DLL" (ByVal_
        hostname$) As Long
Private Declare Sub RtlMoveMemory Lib "KERNEL32" (hpvDest AsAny, _
        ByVal hpvSource&, ByVal cbCopy&)

Function hibyte(ByVal wParam As Integer)    '获得整数的高位
   hibyte = wParam  &H100 And &HFF&
End Function

Function lobyte(ByVal wParam As Integer)    '获得整数的低位
   lobyte = wParam And &HFF&
End Function

FunctionSocketsInitialize()
   Dim WSAD AsWSADATA
   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) ThensHighByte = Trim$(str$(hibyte(WSAD.wversion)))
      sLowByte = Trim$(str$(lobyte(WSAD.wversion)))
      sMsg = "Windows Sockets版本 " & sLowByte & "." &sHighByte
      sMsg = sMsg & "不被winsock.dll支持 "
      MsgBoxsMsg
      End
   End If
   
   If WSAD.iMaxSockets < MIN_SOCKETS_REQD ThensMsg = "这个系统需要的最少Sockets数为 "sMsg = sMsg & Trim$(str$(MIN_SOCKETS_REQD))
      MsgBoxsMsg
      End
   End If
   
End Function

SubSocketsCleanup()
   Dim lReturn As Long
   lReturn =WSACleanup()
   
   If lReturn <> 0 Then
      MsgBox "Socket错误 " & Trim$(str$(lReturn)) & "occurred in Cleanup "
      End
   End If
End Sub


SubForm_Load()
    '初始化Socket
SocketsInitialize
End Sub

Private Sub Form_Unload(Cancel As Integer)
    '清除Socket
SocketsCleanup
End Sub
Private Function getip(name As String) As String
   Dim hostent_addr As Long
   Dim host AsHOSTENT
   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 Thengetip = ""                     '主机名不能被解释
      Exit Function
   End If
   RtlMoveMemory host, hostent_addr, LenB(host)
   RtlMoveMemory hostip_addr, host.hAddrList, 4
   
   ReDim temp_ip_address(1 Tohost.hLength)
   RtlMoveMemory temp_ip_address(1), hostip_addr, host.hLength
   
   For i = 1 Tohost.hLength
      ip_address = ip_address & temp_ip_address(i) & "."
   Nextip_address = Mid$(ip_address, 1, Len(ip_address) - 1)
   
   getip =ip_address

End Function

Private SubCommand1_click()
    Dim str As String
    str =getip(Text1.Text)
    If str = "" ThenText2.Text = "主机名不能被解释"
    ElseText2.Text = str
    End If
End Sub
Private Function getname(addrstr As String) As String
    Dim hostent_addr As Long
    Dim host AsHOSTENT
    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 = 0j = 0
    Dotemp_int = 0i = 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 Thenaddr(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 Thengetname = "地址非法"
        Exit Function
    End Ifhostent_addr = gethostbyaddr(addr(0), j, 2)
    If hostent_addr = 0 Thengetname = "此地址无法解析"
        Exit Function
    End IfRtlMoveMemory host, hostent_addr, LenB(host)
    RtlMoveMemory hname(1), host.hname, 50j = 51
    For i = 1 To 50
        If hname(i) = 0 Thenj =i
        End If
        If i >= j Thenhname(i) = 32
        End If
    Nexti
    getname = Trim$(StrConv(hname, vbUnicode))
End Function
Private SubCommand2_Click()
    Dim name As Stringname =getname(Text2.Text)
    If name = "" Thenname = "此地址没有域名"
    End IfText1.Text =name
End Sub

免责声明:文章转载自《vb中从域名得到IP及从IP得到域名》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇【Vue入门】利用VueCli搭建基本框架--在Home页实现上左右基本布局(五)Linux 查看磁盘空间 相关命令下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

【自制工具类】Java删除字符串中的元素

这几天做项目需要把多个item的id存储到一个字符串中,保存进数据库。保存倒是简单,只需要判断之前是否为空,如果空就直接添加,非空则拼接个“,” 所以这个字符串的数据结构是这样的 String str = "a,b,c,d"; 保存简单了,那么删除指定元素呢?这就有点麻烦了,取网上查了好久,不是js的实现就是其他语言的,所以决心自己写个工具类,看了一上午,...

springsession生成sessionid不一致问题解决

不废话,本人遇到的问题主要是两个不同的springboot版本,需要共享sessionid。 1.配置application #cookie作用域server.servlet.session.cookie.path=/server.servlet.session.cookie.max-age=-1server.servlet.session.cookie....

Oracle 11c下载 及连接到OracleDB的简单程序

Oracle官网总是不太贴心。还是网友贴心。 https://pan.baidu.com/s/1ZCFLUi4Ti_WUYOFR3gB2dA 是11g版本下载包,下载下来解压就能用了。 安装完毕后,驱动包在【oralcehome】product11.2.0dbhome_1jdbclib下。  访问Oracle的JDBC程序,建表请见 https://www...

RocketMQ(八)RocketMQ的Consumer负载均衡

一、问题描述 RocketMQ的Consumer是如何做的负载均衡?比如:5个Consumer进程同时消费一个Topic,这个Topic只有4个queue会出现啥情况?反之Consumer数量小于queue的数据是啥情况? 二、源码剖析 1、RebalancePushImpl public class RebalancePushImpl extends R...

判断SQLSERVER数据库表字段为空的问题

今天在用遍历dataset所有记录时(把dataset中的字段值读出并赋给各TextBox的Text属性), 读取方法:TextBox3.Text=Convert.ToString(dataSet11.msg_info[a].msg_receiver),a是一变量,利用button_click触发其自增, 用以上方法当读取到一条类型为datatime的空字...

在Delphi中高效执行JS代码

因为一些原因,需要进行encodeURIComponent和decodeURIComponent编码,在Delphi中找了一个,首先是发现不能正确编码+号,后面强制处理替换了,勉强可用。 后面发现多次使用后delphi自带的HttpEncode会报Out of Memory. 以上可能是我使用的不好,但没有找到解决办法。 后面想到直接采用运行JavaScr...