どうも!リョクちゃです。
今回は、自身のipアドレスをアプリケーションで取得する方法を紹介します。
意外と知っていそうで知らないということで今回ipアドレスをテーマにしました。
ちなみに前回はこちら、
目次
ipアドレスとは
パソコンなどのネットワークに接続する端末がネットワークに接続する際に利用されます。
簡単にいうと、インターネット上の住所といった位置づけになります。
ipアドレスには2種類あり、それぞれ
- IPv4
- IPv6
があります。
一般的には、IPv4がなじみ深いと思います。
昨今のネットワーク機器の普及を見ると、IPv4は既に全世界へ割り振り済みとされており、
将来的にはIPv6に置き換わっていくことが予測されます。
→ この問題・現象をIP枯渇問題といい、注目の問題でもあります。
それぞれで違うのは、組み合わせの数になります。
IPv4では、約43億個
IPv6では、約340×10^36個(澗個:かんこ)
IPv6は実質無限に近いIPが利用可能なんです。
また、形式にも違いがあり、
IPv4では、「177.17.255.1」
IPv6では、「dd11:15:12ab:1:22c:9bff:fe2b:b5d7」
といった形式で私たちには見えます。
IPv4は、32bitを8bitずつ”.”(ドット)で4分割し、分割した数を10進数で表示しています。
IPv6は、128bitを16bitずつ”:”(コロン)で8分割し、分割した数を16進数で表示しています。
準備編:フォームの作成
では、実際にipアドレスを取得していく方法を紹介していきます。
まずは準備として下のようなフォームを作成します。
ちなみに筆者の環境は、
- VisualStudio2019
- Windows 10 64bit
- .Net Framework 4.5.2
です。
アプリケーションの目的
今回作成するフォームアプリケーションの目的を下に示します。
といった事を目的とします。
IPv4の取得
IPv4を取得するには、以下の手順で行います。
- ホスト名を取得する
- 取得したホスト名からIPアドレスを取得する(※配列で取得)
- IPアドレスから自身のIPv4を抽出する
といった流れで行っていきます。
ホスト名を取得する
ホスト名を取得するには、
を使います。
これを使うと、自身のマシンのデバイス名が取得されます。
取得したホスト名からIPアドレスを取得する
次に取得したホスト名からIPアドレスを取得します。
と書くことで、ホスト名に紐づくIPアドレスの一覧が取得できます。
ここでは複数のIPアドレスが取得されるので注意してください。
IPアドレスから自身のIPv4を抽出する
取得したIPアドレスの一覧からIPv4を抽出していきます。
マシンによっては複数のIPv4があるかと思います。
今回はIPアドレス一覧の最後の値を抽出します。
以上を踏まえてコードに書くと下のようになります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
Public Class TestIp Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click ' ①ホスト名を取得する Dim hostName As String = System.Net.Dns.GetHostName() ' ②ホスト名からIPアドレスを取得する Dim ipAdList As System.Net.IPAddress() = System.Net.Dns.GetHostAddresses(hostName) ' ③IPアドレスの一覧からIPv4を抽出する Dim rec As String = "" For Each address As System.Net.IPAddress In ipAdList rec = address.ToString() Next address Console.WriteLine(rec) End Sub End Class |
今回は出力結果については表示はしませんので、各自で確認をしてみてください。
IPv6を取得する
IPv6を取得するには、既にIPv4でコードを実行された方はわかるかもしれませんが、
実は既にIPv6も取得ができています……。
ですので、IPアドレスの一覧からIPv6を抽出するだけになります。
今回は、一番最初の値を抽出しましょう。
先ほどのコードに追記していきます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
Public Class TestIp Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click ' ①ホスト名を取得する Dim hostName As String = System.Net.Dns.GetHostName() ' ②ホスト名からIPアドレスを取得する Dim ipAdList As System.Net.IPAddress() = System.Net.Dns.GetHostAddresses(hostName) ' ③IPアドレスの一覧からIPv4を抽出する Dim rec As String = "" For Each address As System.Net.IPAddress In ipAdList rec = address.ToString() Next address ' IPv6を取得する Dim recIp6 As String = ipAdList(0).ToString() ' 結果を出力 Console.WriteLine(rec) Console.WriteLine(recIp6) End Sub End Class |
これでIPv4とIPv6を取得することができました。
最後にラベルに表示をするようにコードを直しましょう。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
Public Class TestIp Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click ' ①ホスト名を取得する Dim hostName As String = System.Net.Dns.GetHostName() ' ②ホスト名からIPアドレスを取得する Dim ipAdList As System.Net.IPAddress() = System.Net.Dns.GetHostAddresses(hostName) ' ③IPアドレスの一覧からIPv4を抽出する Dim rec As String = "" For Each address As System.Net.IPAddress In ipAdList rec = address.ToString() Next address ' IPv6を取得する Dim recIp6 As String = ipAdList(0).ToString() ' 結果をラベルに出力 Me.Label2.Text = rec Me.Label4.Text = recIp6 End Sub End Class |
実行して、下のような画面が表示されればクリアです。
※ IP部分については非表示にしています。
IPv4とIPv6を区別して取得したい場合
一方で、それぞれを区別して取得したい場合があるかもしれません。
そんな時は、条件分岐を使ってわけてあげます。
その際の分ける方法としては、
IPv4
IPv6
をそれぞれ使ってどちらかの判定をしてあげます。
先ほどのコードを修正したのが下のコードになります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
Public Class TestIp Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click ' ①ホスト名を取得する Dim hostName As String = System.Net.Dns.GetHostName() ' ②ホスト名からIPアドレスを取得する Dim ipAdList As System.Net.IPAddress() = System.Net.Dns.GetHostAddresses(hostName) ' ③IPアドレスの一覧からIPv4とIPv6を分けて抽出する Dim ipv4List As New List(Of String) Dim ipv6List As New List(Of String) For address As Integer = 0 To ipAdList.Length - 1 ' IPv4 If ipAdList(address).AddressFamily = Net.Sockets.AddressFamily.InterNetwork _ Then ipv4List.Add(ipAdList(address).ToString) ' IPv6 If ipAdList(address).AddressFamily = Net.Sockets.AddressFamily.InterNetworkV6 _ Then ipv6List.Add(ipAdList(address).ToString) Next address End Sub End Class |
それぞれ分けた後にリスト変数に追加していっています。
まとめ
以上、今回は自身のマシンのIPアドレスを取得する方法を例を交えて解説していきました。
意外と知っているようで知らないIPアドレスの取得方法。
イメージだけでもつかんでいただけたらなと思います。
IPアドレスを取得するには、
① ホスト名を取得する
② ①からIPアドレスの一覧を取得する
③ ②の一覧からIPv4とIPv6を抽出する
最後までお読みいただきありがとうございます。
・こちらの書籍を参考にVB.Net勉強しています。