1. 程式人生 > >根據計算機名獲得IP,和根據IP獲得主機名(轉)

根據計算機名獲得IP,和根據IP獲得主機名(轉)

Option Explicit

'// define constants
Private Const IP_SUCCESS As Long = 0
Private Const SOCKET_ERROR As Long = -1

Private Const MAX_WSADescription As Long = 256
Private Const MAX_WSASYSStatus As Long = 128
Private Const MIN_SOCKETS_REQD As Long = 1

Private Const WS_VERSION_REQD As Long = &H101
Private Const WS_VERSION_MAJOR As Long = WS_VERSION_REQD / &H100 And &HFF&
Private Const WS_VERSION_MINOR As Long = WS_VERSION_REQD And &HFF&

Private Const WSADescription_Len As Long = 256
Private Const WSASYS_Status_Len As Long = 128
Private Const AF_INET As Long = 2

'// structures

Private Type HOSTENT
    hName As Long
    hAliases As Long
    hAddrType As Integer
    hLength As Integer
    hAddrList As Long
End Type

 
Private Type WSADATA
   wVersion As Integer
   wHighVersion As Integer
   szDescription(0 To MAX_WSADescription) As Byte
   szSystemStatus(0 To MAX_WSASYSStatus) As Byte
   wMaxSockets As Long
   wMaxUDPDG As Long
   dwVendorInfo As Long
End Type

'// api
'kernel32
Private Declare Sub apiCopyMemory Lib "kernel32" Alias "RtlMoveMemory" (xDest As Any, xSource As Any, ByVal nBytes As Long)
Private Declare Function apiStrLen Lib "kernel32" Alias "lstrlenA" (lpString As Any) As Long
'wsock32
Private Declare Function apiGetHostByName Lib "wsock32.dll" Alias "gethostbyname" (ByVal hostname As String) As Long
Private Declare Function apiWSAStartup Lib "wsock32.dll" Alias "WSAStartup" (ByVal wVersionRequired As Long, lpWSADATA As WSADATA) As Long
Private Declare Function apiWSACleanup Lib "wsock32.dll" Alias "WSACleanup" () As Long
Private Declare Function apiInetAddr Lib "wsock32.dll" Alias "inet_addr" (ByVal s As String) As Long
Private Declare Function apiGetHostByAddr Lib "wsock32.dll" Alias "gethostbyaddr" (haddr As Long, ByVal hnlen As Long, ByVal addrtype As Long) As Long
 
'// private functions
Private Function InitializeSocket() As Boolean
    Dim WSAD As WSADATA
   
    'attempt to initialize the socket
    InitializeSocket = apiWSAStartup(WS_VERSION_REQD, WSAD) = IP_SUCCESS
End Function

Private Sub CloseSocket()
    'try to close the socket
    If apiWSACleanup() <> 0 Then
        MsgBox "Error calling apiWSACleanup.", vbCritical
    End If

End Sub

Public Function GetIPFromHostName(ByVal sHostName As String) As String
    'converts a host name to an IP address.
   
    Dim nBytes As Long
    Dim ptrHosent As Long
    Dim hstHost As HOSTENT
    Dim ptrName As Long
    Dim ptrAddress As Long
    Dim ptrIPAddress As Long
    Dim sAddress As String 'declare this as Dim sAddress(1) As String if you want 2 ip addresses returned
   
    'try to initalize the socket
    If InitializeSocket() = True Then
      
        'try to get the IP
        ptrHosent = apiGetHostByName(sHostName & vbNullChar)
       
        If ptrHosent <> 0 Then
                   
            'get the IP address
            apiCopyMemory hstHost, ByVal ptrHosent, LenB(hstHost)
            apiCopyMemory ptrIPAddress, ByVal hstHost.hAddrList, 4
             
            'fill buffer
            sAddress = Space$(4)
            'if you want multiple domains returned,
            'fill all items in sAddress array with 4 spaces
           
            apiCopyMemory ByVal sAddress, ByVal ptrIPAddress, hstHost.hLength
           
            'change this to
            'CopyMemory ByVal sAddress(0), ByVal ptrIPAddress, hstHost.hLength
            'if you want an array of ip addresses returned
            '(some domains have more than one ip address associated with it)
           
            'get the IP address
            GetIPFromHostName = IPToText(sAddress)
            'if you are using multiple addresses, you need IPToText(sAddress(0)) & "," & IPToText(sAddress(1))
            'etc
        End If
    Else
        MsgBox "Failed to open Socket."
    End If
End Function

Private Function IPToText(ByVal IPAddress As String) As String
    'converts characters to numbers
    IPToText = CStr(Asc(IPAddress)) & "." & _
              CStr(Asc(Mid$(IPAddress, 2, 1))) & "." & _
              CStr(Asc(Mid$(IPAddress, 3, 1))) & "." & _
              CStr(Asc(Mid$(IPAddress, 4, 1)))
End Function

Public Function GetHostNameFromIP(ByVal sIPAddress As String) As String
   
    Dim ptrHosent As Long
    Dim hAddress As Long
    Dim sHost As String
    Dim nBytes As Long
   
    'try to open the socket
    If InitializeSocket() = True Then
   
        'convert string address to long datatype
        hAddress = apiInetAddr(sIPAddress)
       
        'check if an error ocucred
        If hAddress <> SOCKET_ERROR Then
           
            'obtain a pointer to the HOSTENT structure
            'that contains the name and address
            'corresponding to the given network address.
            ptrHosent = apiGetHostByAddr(hAddress, 4, AF_INET)
           
            If ptrHosent <> 0 Then
               
                'convert address and
                'get resolved hostname

                apiCopyMemory ptrHosent, ByVal ptrHosent, 4
               
                nBytes = apiStrLen(ByVal ptrHosent)
               
                If nBytes > 0 Then
                    'fill the IP address buffer
                    sHost = Space$(nBytes)
                   
                    apiCopyMemory ByVal sHost, ByVal ptrHosent, nBytes
                    GetHostNameFromIP = sHost
                End If
            Else
                MsgBox "Call to gethostbyaddr failed."
            End If
            'close the socket
            CloseSocket
        Else
            MsgBox "Invalid IP address"
        End If
    Else
        MsgBox "Failed to open Socket"
    End If
End Function




Private Sub cmdResolve_Click()
Dim cResolve As clsResolve
    Set cResolve = New clsResolve
    MsgBox cResolve.GetHostNameFromIP("66.111.65.129")
    MsgBox cResolve.GetIPFromHostName("microsoft.com")
End Sub

相關推薦

根據計算機獲得IP根據IP獲得主機()

Option Explicit'// define constantsPrivate Const IP_SUCCESS As Long = 0Private Const SOCKET_ERROR As Long = -1Private Const MAX_WSADescrip

住宅動態IP資料中心IP移動手機IP之間的區別

什麼時候需要購買住宅動態IP? 住宅動態IP是指私人的IP地址,這意味著你在訪問網路時是通過真實的使用者傳送你的請求。 購買住宅IP可確保你不會被目標網站遮蔽或提供誤導資訊。   什麼時候需要購買資料中心IP? 資料中心IP也稱為靜態IP,或是固定IP。意味著你可以使用一個

在 Ubuntu Linux上如何更改你的主機( 計算機名稱)

Ubuntu要求你在安裝計算機時為你的計算機選擇一個名為"主機名"的名稱。 你可以稍後更改這個主機名,但是Ubuntu並沒有提供一個圖形化的介面。 這裡過程也將在 Linux Mint 和其他基於debian的 Linux發行版中工作。 其他Linux發行版- 例如Fedora和其他基於紅帽的發行版-

根據名稱檢索儲存過程內容根據內容檢索儲存過程

--     GetContentByProcedureName '[dbo].[儲存過程名]' ALTER procedure [dbo].[GetContentByProcedureName] (@ProcedureName nvarchar(500)) as if

獲取服務器IP客戶端IP

進程 獲取 () base accep roc eight 可能 php_sapi 客戶端IP相關的變量 1. $_SERVER[‘REMOTE_ADDR‘]; 客戶端IP,有可能是用戶的IP,也有可能是代理的IP。 2. $_SERVER[‘HTTP_CLIENT_IP

Apache搭建Web主機(虛擬目錄、分別基於IP地址、端口、主機)

apache 基於端口區分網站 基於域名區分網站 基於ip區分網站 dns域名解析 Apache介紹 Apache HTTP Server是一款開源的網站服務軟件,在Web服務器領域中長期保持著超過半數的份額,Apache服務器可以運行在Linux、UNIX、Windows等多數操作系統平

C# 之 獲取服務器IP客戶端IP以及其它

output ipaddress ons use variables 例子 mac地址 user nag 本文主要是從網絡上搜索的文章進行參考,也是提供一個大概的方向和思路吧。當然如果有能用的代碼,可直接復制過去根據自己的情況修改和使用。 一、思路(主要用於局域網內

contso7配置靜態IPLinux固定IP地址

不使用網路管理配置靜態IP地址 進入目錄 cd /etc/sysconfig/network-scripts 修改以下配置(後邊有引數講解) 輸入ifconfig檢視IP資訊,裡面有IPADDR和NETMASK ifconfig   點開VMware-虛擬網

微信獲取好友真實ip qq獲取ip經緯度定位 隱蔽獲取 微信查ip

微信好友ip查詢獲取 QQ好友ip查詢獲取 隱蔽方式 ip獲取不需要好友任何操作 不需要點選任何東西 即可獲取真實的ip地址 經緯度跳轉定位 可利用XML欺騙對方點選 header("Location: url:xxxxxx.png "); 以下是成品 只要你會搭建

穿透內網連線動態ip內網ip打洞-----p2p實現原理

轉自:http://www.cnblogs.com/eyye/archive/2012/10/23/2734807.html 網上找了很多,程式碼大堆,原理講清楚透徹的不多。 本人找幾篇講得好的來整理一下。 一片技術文章,最主要的講清楚原理,如果再有完整的能執行的原

C# 之 獲取伺服器IP客戶端IP以及其它

1、獲取客戶端IP:Request.ServerVariables.Get("Remote_Addr").ToString(); 2、獲取客戶端主機名:Request.ServerVariables.Get("Remote_Host").ToString(); 3、客戶端瀏覽器:Request.

DHCP動態配置ip地址指定ip地址

實驗準備及目標 1.兩臺虛擬機器 2.服務端IP:192.168.1.1 3.客戶端IP:動態+指定IP:192.168.1.88 服務端 1.DHCP軟體安裝 在軟體安裝包下: rpm -ivh dhcp-4.1.1-38.P1.el6.x86_64.rpm

【乾貨】如何用九州IP地址修改隱藏自己的電腦IP更換電腦ip。?

現在很多使用者比如公司、學校等,處於同一區域網內的使用者,對外IP確實相同,就導致了其中一人或多人用過之後,其他人就無法再次使用,為了解決這個問題,各種換IP軟體隨之出現。網上有各種方法和軟體,有收費的頁遊免費的,但是操作起來卻都不是那麼簡單,這裡就不一一列舉了,所以今日特此

python爬蟲之反爬蟲(隨機user-agent獲取代理ip檢測代理ip可用性)

python爬蟲之反爬蟲(隨機user-agent,獲取代理ip,檢測代理ip可用性) 目錄 隨機User-Agent 獲取代理ip 檢測代理ip可用性            隨機User-Agent fake_useragent庫,偽

使用udhcpc能獲取到DHCP自動分配的IP但是該IP卻沒有設定到網絡卡上

udhcpc是一個面向嵌入式系統的非常小的DHCP客戶端,字母的縮寫微- DHCP -客戶端(μDHCPc)。1.udhcpc -i eth0 udhcpc只是獲取一個IP,我們需要把\busybox-1.1.2\examples\udhcp下的指令碼simple.scri

c#中獲取伺服器IP客戶端IP以及Request.ServerVariables詳細說明

客戶端ip: Request.ServerVariables.Get(“Remote_Addr”).ToString(); 客戶端主機名: Request.ServerVariables.Get(“Remote_Host”).ToString();

IP 別名輔助 IP 地址

概述 IP 別名(IP Alias),輔助ip地址(Secondary IP Address) IP alias 是由 ifconfig 程式來建立和維護的,而 secondary IP address 則是由 ip 程式來建立和維護的。ip addr ad

在CentOS/RHEL 7中使用hostnamectl的命令列工具檢視或修改與主機相關的配置

在CentOS/RHEL 7中,有個叫hostnamectl的命令列工具,它允許你檢視或修改與主機名相關的配置。 要檢視主機名相關的設定: $ hostnamectl status 只檢視靜態、瞬態或靈活主機名,分別使用“--static”,“--transien

計算機網絡三:域名、IP地址TCP/IP協議

情況下 我們 prot 組成 連續 網絡層 org 物理地址 通信網 一、域名 域名(Domain Name),簡稱域名、網域,是由一串用點分隔的字符型標誌名字組成的Internet上某一臺計算機或計算機組的名稱,用於在數據傳輸時標識計算機的電子方位(有時也指

【程式】Windows下根據計算機獲取IP地址的C語言程式

方法一(當指定的裝置不存在時,有可能返回的是本機的IP地址,所以不建議使用): #include <stdio.h> #include <WinSock2.h> #pragm