web-dev-qa-db-ja.com

コマンドラインからIPジオロケーションを検索

私は、IPアドレスの束の地理的位置を返すために、迅速で汚いスクリプトをつなぎ合わせようとしてきました。

私はfreegeoip.netを使用していますが、cmd行に相当する簡単なwgetが見つからなかったため、PowerShellスクリプトを使用して、バッチファイルから呼び出します(または、少なくとも試してみて、それが失敗していると思います)。

コマンドラインは次のとおりです。

for /F "tokens=* usebackq delims=" %a in ("E:\DATA\02.ips.txt") do (
set /a N+=1
 powershell -command "E:\DATA\Resources\geolocation.ps1 %a"
)

(IPではなくヘッダーが含まれているため、最初の行はスキップする必要があります)

geolocation.ps1は次のとおりです。

wget freegeoip.net/csv/$args[0] -OutFile "E:\DATA\IPs\$args[0].txt"

これにより、IPごとに返されたCSVのフォルダーが得られ、E:\ DATA\IPs * .txt alltheips.txtのコピーを使用して1つのファイルにまとめることができ、そのファイルが別のファイルに読み込まれることを期待しています。使用するアプリ。

この(明らかに)ハッシュは、私がグーグルで検索し、あちこちで拾ったものからマッシュアップされていますが、(明らかに)私は実際にここで何をしているのかわからないので、不足している部分の助けはありがたいです!

要するに、私が求めているのは、IPアドレスのリストを取得することです(ヘッダー付きのテキストファイルがあり、各行は新しいIPであり、ファイルの長さはxであり、実行ごとに異なります-時々空になるので、ファイルの長さを確認でき、プロセスをスキップするためのヘッダーだけが含まれている場合に便利です)。それらのIPをfreegeoip.netと照合し、それらが提供するデータを1つのファイルに照合して、ユーザーの場所をIPを介して保持している他のデータに関連付けるプログラムで使用します。

乾杯!

2
le__bon

スクリプト全体をスクリプトに入れます。この場合、PowerShellをバッチファイルでラップする必要はありません。実際、PowerShellはオブジェクト指向であるため、そうすることで多くのことを失うことになります。

# for the filename, this is a string
# quotes needed if there's a space, 
# use single quotes unless the string is an expression which needs evaluation
#
# Import-CSV builds an array of objects from the contents of the csv
# using the first row as a header
# in your case the objects will be strings which are IP addresses
# 
# For your own benefit, make sure the ip address column 
# (only one columnt per your post) has a simple title in the first row

$IPList = Import-CSV E:\DATA\02.ips.txt 

# the Foreach command is a for loop used with arrays or collections to loop through all the members

Foreach ($IPAddress in $IPList) {
    # In PowerShell, wget is an alias for Invoke-WebRequest
    # the $() wrapper around the $IPAddress.ipaddress is to force evaluation of that expression
    Invoke-WebRequest "freegeoip.net/csv/$($IPAddress.ipaddress)" -OutFile "E:\DATA\IPs\$($IPAddress.ipaddress).txt"
    }
1
Xalorous