はじめに
トラブルシュートしてると、特定のグローバルIPアドレスへの通信が発生しているケースがあります。そんなときにこのIPアドレスはどこの組織のもつIPで、何に使用されているのか調べたくなることが多々あります。単純にGoogle検索を行ってもヒットするのですが、より洗練された方法としてipinfo.ioを使用するのがおすすめですので、使い方をメモしておきます。
ipinfo.ioとは
ipinfo.ioは、IPアドレスに関する情報を提供するサービスです。2013年に元Facebookエンジニアのベン・ダウリングによって設立されました。このサービスを使うことで、IPアドレスから地理的な位置、インターネットサービスプロバイダー(ISP)、使用されているネットワークの種類などの詳細情報を得ることができます。この情報は、セキュリティ分析、オーディエンスの地域分析、カスタマイズされたコンテンツの提供など、さまざまな目的に利用されます。
アカウント登録
アカウント登録をせずとも便利に使えますが、アカウント登録することで以下の利益を教授できます。
- リクエスト上限を1日1kから月5万kにアップ
- リクエスト制限に近づいたらメールでお知らせ
- 他のAPIのトライアルへのアクセス
- リアルタイムのリクエスト量情報を表示するダッシュボード
- リクエスト要約メール(毎週または毎月)
また、ipinfo.ioは有料プランもあり、上位プランになればAPI上限の増加だけでなく、AbuseやHosted Domainなど追加の情報の閲覧が可能となるようです。
ipinfo.ioの使い方
多くの人は1日1件も確認することはないと思うので、今回は、アカウント登録を行わない状態で使い方を見ていきます。例示はPowerShellからの利用になります。
自身のIPアドレスを知る
ipinfo.io にWebリクエストを行うと、自身のグローバルIPアドレス情報が返ってきます。
>Invoke-WebRequest ipinfo.io | Write-Host { "ip": "xxx.xxx.xxx.xxx", "hostname": "xxx.xxx.xxx", "city": "Tokyo", "region": "Tokyo", "country": "JP", "loc": "35.xxxxx,139.xxxxx", "org": "ASxxxx xxxxx", "postal": "xxx-xxxx", "timezone": "Asia/Tokyo", "readme": "https://ipinfo.io/missingauth" }
特定のIPアドレスを調べる
IPアドレスをURLでディレクトリ指定すると、そのIPアドレスの情報が返ってきます。以下は8.8.8.8の例です。
>Invoke-WebRequest ipinfo.io/8.8.8.8 | Write-Host { "ip": "8.8.8.8", "hostname": "dns.google", "anycast": true, "city": "Mountain View", "region": "California", "country": "US", "loc": "37.4056,-122.0775", "org": "AS15169 Google LLC", "postal": "94043", "timezone": "America/Los_Angeles", "readme": "https://ipinfo.io/missingauth" }
さらに各項目をURLでディレクトリ指定すると、指定した情報だけが返ってきます。
# /ip を指定 >Invoke-WebRequest ipinfo.io/8.8.8.8/ip | Write-Host 8.8.8.8 # /org を指定 >Invoke-WebRequest ipinfo.io/8.8.8.8/org | Write-Host AS15169 Google LLC
複数のIPアドレスをまとめて処理する
複数のIPアドレスを検索したい場合は、ForEachで回すと良いでしょう。(やり過ぎ注意)
function Get-IpInfo { param ( [Parameter(Mandatory=$true)] [string]$IpAddress ) try { $response = Invoke-WebRequest "ipinfo.io/$IpAddress" -ErrorAction Stop $response.Content } catch { "エラー: $_" } } param ( [Parameter(Mandatory=$true)] [ValidateScript({Test-Path $_})] [string]$FilePath ) $outputFileName = "output_" + (Get-Date -Format "yyyyMMdd-HHmm") + ".txt" Get-Content $FilePath | ForEach-Object { $ipInfo = Get-IpInfo -IpAddress $_ Write-Host $ipInfo $ipInfo | Out-File -Append $outputFileName Start-Sleep -Seconds 2 }
サクッとCSV出力するにはこんな感じかしら。
$ips = @( "8.8.8.8", "1.1.1.1" ) # ここに問い合わせたいIPアドレスのリストを入力 $results = @() foreach ($ip in $ips) { $output = Invoke-WebRequest -Uri "ipinfo.io/$ip" | ConvertFrom-Json $results += $output | Select-Object ip, hostname, city, region, country, loc, org, postal, timezone, readme } $results | Export-Csv -Path "output.csv" -NoTypeInformation -Encoding UTF8
おわりに
どうやらCLIツールも作ってるらしい。すごいな。バルク処理等を簡単にできる模様。
役に立ったと思った方はビール1杯奢ってください!