セージ の メモ書き

メモこそ命の恩人だ

C# - IPAddress クラス

IPAddress.TryParse メソッド

IPAddress.TryParse メソッド (System.Net) | Microsoft Docs

  • string から IPAddress にキャストする。
  • キャストの可否を判定できる。
  • キャスト後 ToString すれば、ゼロパディングを削除できる。

こんな感じ。

void Test(string ipAddress) 
{
    var isSucceeded = IPAddress.TryParse(ipAddress, out var parsedIPAddress);
    Debug.WriteLine($"isSucceeded : {isSucceeded}, {parsedIPAddress}");
}
Test("192.168.0.1");
// isSucceeded : True, 192.168.0.1

// ゼロパディングVer.
Test("192.168.000.001");
// isSucceeded : True, 192.168.0.1


// ↓↓↓ 以下、キャストエラー ↓↓↓

// 過剰ゼロパディングVer.
Test("0192.0168.0000.0001");
// isSucceeded : False, 

// コンマなしVer.
Test("192168000001");
// isSucceeded : False, 

// 範囲エラーVer.
Test("999.168.0.1");
// isSucceeded : False, 

ローカルIPアドレスの取得

  • Dns.GetHostAddresses メソッドで取得できる。
  • ローカルのホスト名を渡すだけ。
  • IsIPv6LinkLocal で IPv4 or IPv6 をフィルタリングできる。

こんな感じ。

var localIPv4List = Dns.GetHostAddresses(Dns.GetHostName())
    .Where(x => x.AddressFamily == System.Net.Sockets.AddressFamily.InterNetwork)
    .ToList();
// IPv4 を取得できたことを確認。

var localIPv6List = Dns.GetHostAddresses(Dns.GetHostName())
    .Where(x => x.AddressFamily == System.Net.Sockets.AddressFamily.InterNetworkV6)
    .ToList();
// IPv6 を取得できたことを確認。


豆知識

IPアドレス 169.254.xxx.xxx (リンクローカルアドレス)

リンクローカルアドレス(169.254.xxx.xxx)とは - 意味をわかりやすく - IT用語辞典 e-Words

IPアドレス 127...* (ループバックアドレス)

ループバックアドレス(127.0.0.1 / ::1)とは - 意味をわかりやすく - IT用語辞典 e-Words

  • loopback : 戻ってくる
  • 自分自身を表すIPアドレス
  • IPv4 => 127.0.0.1 ~ 127.255.255.254 (一般的には "127.0.0.1" を使用)
  • IPv6 => ::1 (0:0:0:0:0:0:0:1)
  • ホスト名 => localhost
  • 利点
    • 外部への通信を行わず、ネットワークを使用できる。
    • 通信テストをローカル環境で行う際に役立つ。

hosts (ホスツ)

hosts - Wikipedia

  • IPアドレスとホスト名の対応表。テキストファイル。
  • hosts に "127.0.0.1" が定義されている。
  • IPアドレスFQDN を定義すれば、DNSより優先して動作する。
  • DNS の普及により、hosts はほぼ使用しない。
  • hosts 運用の場合、各端末の hosts を更新する必要があり手間。
  • Windows の場合は以下に保存されている。
    • C:\windows\system32\drivers\etc\hosts



以上