setodaNote

忘れる用のメモ書き for Cybersecurity

curl で綺麗に情報が表示されるサイト

curl は URL 指定でデータを受信(もしくは送信)するためのコマンドラインツールです。

Linux ではよく利用されるコマンドのひとつで、最近になって Windows 10 でも標準で組み込まれるようになったので、最新版の Windows 10 であればコマンドプロンプトに「curl」と打ち込むことで利用できます。

f:id:soji256:20210108184943p:plain:w520
https://curl.se/

curl でアクセスすることでコマンドライン上に情報が綺麗に表示されるよう最適化されているサイトがいくつかあるのは知っていたのですが、それらをまとめたサイトがあったので、実際に表示させてみて面白かったものをピックアップしてみました。

なお、以下の画像はすべて「Windows Terminal」のコマンドプロンプト上で curl を実行した結果を貼り付けたものです。*1

 

curl で綺麗に情報が表示されるサイト

天気予報

有名どころで割と広く知られているように思います。

f:id:soji256:20210108175455p:plain:w520
天気予報(大阪):wttr.in

f:id:soji256:20210108175527p:plain:w497
月齢表示:wttr.in/moon@2021-12-25

# 標準的な使い方(IP アドレスの地域判定を元に天気予報を返してくれる)
curl wttr.in
# 場所を指定する
curl wttr.in/paris
# 表示言語を日本語に指定する
curl -H "Accept-Language: ja" wttr.in
# 月齢を表示する
curl wttr.in/moon@2021-12-25
# ヘルプの表示
curl wttr.in/:help

QRコード生成

f:id:soji256:20210108182844p:plain:w399
QRコード生成:qrenco.de

# QRコードにしたいテキストを直接渡す方法
curl qrenco.de/May_The_Force_Be_With_You
# 改行を含む場合の方法
printf "Good luck.\nMay The Force Be With You." | curl -F-=\<- qrenco.de

なお、上記の curl の引数が不思議な形(-F-=\<-)をしていて面白かったので調べて付録にまとめています。

Linux チートシート

f:id:soji256:20210108182921p:plain:w520
Linux チートシート:cheat.sh

# 概要の表示
curl cheat.sh
# ヘルプの表示
curl cheat.sh/:help

暗号通貨の相場表示

f:id:soji256:20210108182954p:plain:w520
暗号通貨相場:rate.sx

f:id:soji256:20210108183022p:plain:w520
暗号通貨相場チャート:rate.sx

# 市場規模の大きい暗号通貨の相場情報一覧
curl rate.sx
# ビットコイン(BTC)の相場チャート
curl rate.sx/btc
# 1ビットコイン -> 日本円
curl jpy.rate.sx/1btc

株価チャート

  • GitHub - ericm/stonks: Stonks is a terminal based stock visualizer and tracker that displays realtime stocks in graph format in a terminal. See how fast your stonks will crash.
    https://github.com/ericm/stonks

f:id:soji256:20210108183047p:plain:w520
株価チャート:stonks.icu

# 銘柄を指定して使う
curl stonks.icu/msft
# 複数の銘柄の場合はスラッシュで区切る
curl stonks.icu/GOOGL/AAPL/FB/AMZN/MSFT

ニュース記事

f:id:soji256:20210108183253p:plain:w520
ニュース記事:getnews.tech/Cyber+attack

# 「Cyber attack」についての記事
curl getnews.tech/Cyber+attack
# ヘルプの表示
curl getnews.tech/:help

その他

STAR WARS episode IV

# STAR WARS episode IV (思った以上に先のシーンまで作られていました)
curl https://asciitv.fr

f:id:soji256:20210108183113p:plain:w360
STAR WARS episode IV:asciitv.fr

Party Parrot (踊るオウム)

# Party Parrot (踊るオウム)
curl parrot.live

f:id:soji256:20210108183142p:plain:w360
踊るオウム:parrot.live

Nyan Cat(宙駆けるネコ)

# Nyan Cat(宙駆けるネコ)
curl ascii.live/nyan
# Nyan Cat(宙駆けるネコ、フルカラーだけど動きは遅い)
curl https://poptart.spinda.net

f:id:soji256:20210108183215p:plain:w360
Nyanyanyanyanyanyanya!

その他(実用的なもの/見た目が派手ではないもの)

自身のIPアドレス情報の取得

IPアドレスを確認できるサイトは数多くありますが、試した中では "whatismyip.akamai.com" のレスポンスが群を抜いていました。

# IP アドレス取得(超速)
curl whatismyip.akamai.com
# IP アドレス取得(高速)
curl curlmyip.net

# 追加情報付き(json形式)
curl https://ipapi.co/json
curl geoplugin.net/json.gp

DNS問い合わせ

curl "api.hackertarget.com/dnslookup/?q=hatenablog.jp"

指定した IPアドレス に対するポートスキャン結果の取得

このサイトではポートスキャンだけでなく、様々なツールが提供されています。

curl -s "https://api.hackertarget.com/nmap/?q={IPアドレス}"

指定した Twitter アカウントの最新ツイートの取得

curl -s "https://decapi.me/twitter/latest?name=soji256"

架空のJSOCデータ取得

# ユーザデータ(10件)
curl -s "https://jsonplaceholder.typicode.com/users"
# コメントデータ(500件)
curl -s "https://jsonplaceholder.typicode.com/comments"

架空の人物名(ランダム)取得

curl pseudorandom.name

参考文献

curl で叩くと面白いサイトまとめ

curl について

シェルの使い方について

その他

付録:"curl -F-=\<-" について

QRコードを生成してくれるサイト「qrenco.de」でサンプルとして記載されていた curl コマンドの引数が不思議だったので調べてみました。 なお、インターネット上の情報等と動作検証とに基づき記載していますが、正確な内容ではないかもしれません。

仕様まわりの確認

  • "-F" は "<name=content>" の形でデータを渡すことで multipart 形式で POST してくれるオプションでした。
  • また、bash ではハイフン("-")により標準入出力とのやりとりができる機能があるそうです。
  • ただし、イコールの直前にあるハイフンは文字列の "-" として認識されているようです。
  • そして、"\<" は引数内で展開された時点でリダイレクトとして認識されるようにしているものと考えました。

実際の挙動の確認

実際に printf "Good luck.\nMay The Force Be With You." | curl -F-=\<- qrenco.de の後半部分の引数を少しずつ変えてパケットを見てみました。

  • 検証1:「curl -F-=\<- qrenco.de」(テンプレートのまま変更なし)

    • パケットでは「name="-"」となっているのが確認できます。
--------------------------ef0d12389abc4567
Content-Disposition: form-data; name="-"

Good luck.
May The Force Be With You.
--------------------------ef0d12389abc4567--
  • 検証2:「curl -Fa=\<- qrenco.de」(イコールの前の文字を "a" に変更)

    • パケットでは「name="a"」となっているのが確認できます。
--------------------------01f89abc67de2345
Content-Disposition: form-data; name="a"

Good luck.
May The Force Be With You.
--------------------------01f89abc67de2345--
  • 検証3:「curl -F=\<- qrenco.de」(イコールの前の文字を削除)

    • パケットでは「name」部分が無くなっていることが確認できます。
--------------------------9abc678def345012
Content-Disposition: form-data

Good luck.
May The Force Be With You.
--------------------------9abc678def345012--

結論

以上から "-F-=\<-" は "-F name=content" の "name" が "-" に "content" が標準入力からのリダイレクト("<-")に設定されているものと考えました。

直前のパイプでつながれている printf の出力内容が "content" として読み込まれて curl が実行されることになるので、 結果的には直観的な理解と同じく、printf の結果がそのまま QR コードの文字列として渡されている形です。

イコールの直後を文字列に変えてみたり、引数の要素を一文字ずつ削除してエラー状況を確認したりした結果も特に結論に反するものはありませんでした。

付録:curl という名称と読み方について

発音自体は "カール" といった感じでいいようですが "しーゆーあーるえる" とも読めて、その場合は "see URL" と聞こえるのも楽しいよねという話も。

1.1 What is cURL?
cURL is the name of the project. The name is a play on 'Client for URLs', originally with URL spelled in uppercase to make it obvious it deals with URLs. The fact it can also be pronounced 'see URL' also helped, it works as an abbreviation for "Client URL Request Library" or why not the recursive version: "curl URL Request Library".

Pronunciation
Most of us pronounce "curl" with an initial k sound, just like the English word curl. It rhymes with words like girl and earl. Merriam Webster has a short WAV file to help.

更新履歴

  • 2021-01-11 新規作成

*1:cmd.exe より表示が綺麗な感じがします。もちろん気のせいです。