ホスト名からIPアドレスを取得 <TOP>
ホスト名からIPアドレスを取得します。
gethostbyname インターネットホスト名に対応するIPアドレスを取得
WSAStartup WinSockを初期化
WSACleanup WinSock のリソースを解放
RtlMoveMemory ある位置から別の位置にメモリブロックを移動する関数
IcmpCreateFile ICMPファイルハンドルを開く
IcmpCloseHandle ICMPファイルハンドルを閉じる
IcmpSendEcho ICMPエコーを送信する
初期状態では、www.yahoo.co.jp が入力されています。ホスト名を入力し取得ボタンをクリックすると該当アドレスを表示し、受信に費やした時間を表示します。
参照
<IPアドレスからホスト名を取得>
※ICMP(Internet Control Message Protocol)
IPのエラーメッセージや制御メッセージを転送するプロトコル。 TCP/IPで接続されたコンピュータやネットワーク機器間で、互いの状態を確認するために用いられる。
'================================================================ '= ホスト名からIPアドレスを取得 '= (GetHostByName.bas) '================================================================ #include "Windows.bi" #define SOCKET_ERROR 0 Type WSADATA wVersion As Integer wHighVersion As Integer szDescription(255) As byte szSystemStatus(128) As byte iMaxSockets As Integer iMaxUdpDg As Integer lpVEndorInfo As Long End Type Type Hostent h_name As Long h_Aliases As Long h_addrType As Integer h_length As Integer h_addr_list As Long End Type Type IP_OPTION_INFORMATION TTL As byte Tos As byte Flags As byte OptionsSize As Long OptionsData As String * 128 End Type Type IP_ECHO_REPLY Address(3) As byte Status As Long RoundTripTime As Long DataSize As Integer Reserved As Integer ndata As Long Options As IP_OPTION_INFORMATION End Type ' インターネットホスト名に対応するIPアドレスを取得 Declare Function Api_gethostbyname& Lib "wsock32" Alias "gethostbyname" (ByVal HostName$) ' WinSockを初期化 Declare Function Api_WSAStartup& Lib "wsock32" Alias "WSAStartup" (ByVal VersionReq&, WSADATAReturn As WSADATA) ' WinSock のリソースを解放 Declare Function Api_WSACleanup& Lib "wsock32" Alias "WSACleanup" () ' ある位置から別の位置にメモリブロックを移動する関数 Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (hpvDest As Any, hpvSource As Any, ByVal cbCopy&) ' ICMPファイルハンドルを開く Declare Function Api_IcmpCreateFile& Lib "icmp" Alias "IcmpCreateFile" () ' ICMPファイルハンドルを閉じる Declare Function Api_IcmpCloseHandle& Lib "icmp" Alias "IcmpCloseHandle" (ByVal HANDLE&) ' ICMPエコーを送信する Declare Function Api_IcmpSendEcho& Lib "icmp" Alias "IcmpSendEcho" (ByVal IcmpHandle&, ByVal DestAddress&, ByVal RequestData$, ByVal RequestSize&, RequestOptns As IP_OPTION_INFORMATION, ReplyBuffer As IP_ECHO_REPLY, ByVal ReplySize&, ByVal TimeOut&) Var Shared Text(4) As Object Var Shared Edit1 As Object Var Shared Button1 As Object For i = 0 To 4 Text(i).Attach GetDlgItem("Text" & Trim$(Str$(i+1))) Text(i).SetFontSize 14 Next Edit1.Attach GetDlgItem("Edit1") : Edit1.SetFontSize 14 Button1.Attach GetDlgItem("Button1") : Button1.SetFontSize 14 '================================================================ '= '================================================================ Declare Sub Button1_on edecl () Sub Button1_on() Var HostName As String Var hFile As Long Var lpWSADATA As WSADATA Var hHostent As Hostent Var AddrList As Long Var Address As Long Var rIP As String Var OptInfo As IP_OPTION_INFORMATION Var EchoReply As IP_ECHO_REPLY Var Ret As Long HostName = GetDlgItemText("Edit1") Text(3).SetWindowText "" Text(4).SetWindowText "" Ret = Api_WSAStartup(&H101, lpWSADATA) If Api_GetHostByName(HostName & String$(64 - Len(HostName), 0)) <> SOCKET_ERROR Then CopyMemory hHostent.h_name, ByVal Api_GetHostByName(HostName & String$(64 - Len(HostName), 0)), Len(hHostent) CopyMemory AddrList, ByVal hHostent.h_addr_list, 4 CopyMemory Address, ByVal AddrList, 4 End If hFile = Api_IcmpCreateFile() If hFile = 0 Then Text(3).SetWindowText "ファイルハンドルを作成できません!" Exit Sub End If OptInfo.TTL = 255 If Api_IcmpSendEcho(hFile, Address, String$(32, "A"), 32, OptInfo, EchoReply, Len(EchoReply) + 8, 2000) Then rIP = Str$(EchoReply.Address(0)) & "." & Str$(EchoReply.Address(1)) & "." & Str$(EchoReply.Address(2)) & "." & Str$(EchoReply.Address(3)) Else Text(3).SetWindowText "タイムアウト!" End If If EchoReply.Status = 0 Then Text(3).SetWindowText rIP Text(4).SetWindowText Trim$(Str$(EchoReply.RoundTripTime)) & "ms" Else Text(3).SetWindowText "失敗しました!" End If Ret = Api_IcmpCloseHandle(hFile) Ret = Api_WSACleanup End Sub '================================================================ '= '================================================================ While 1 WaitEvent Wend Stop End