Closed Hayao0819 closed 3 years ago
www
メモ:
ping
はマルチバイト文字が与えられたら勝手にpunycodeにしてくれる模様(知らなかった)。
最近のバージョンであればLinuxでもBSDでも大丈夫そう。
$ ping -c 1 -s 1 -W 0.25 うんこ.com
PING うんこ.com (157.7.44.218) 1(29) bytes of data.
9 bytes from users016.vip.heteml.jp (157.7.44.218): icmp_seq=1 ttl=26
--- うんこ.com ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
$ ping -V
ping utility, iputils-s20161105
$ ping -c 1 -s 1 -W 0.25 うんこ.com
PING xn--p8j0a9n.com (157.7.44.218): 1 data bytes
9 bytes from 157.7.44.218: icmp_seq=0 ttl=47
--- xn--p8j0a9n.com ping statistics ---
1 packets transmitted, 1 packets received, 0.0% packet loss
$ man ping | tail -n 1
BSD March 29, 2013 BSD
しかし dig は解決してくれないのはなぜ?ping独自でやっている?
$ dig +answer @8.8.8.8 うんこ.com
; <<>> DiG 9.10.6 <<>> +answer @8.8.8.8 うんこ.com
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NXDOMAIN, id: 46466
;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;\227\129\134\227\130\147\227\129\147.com. IN A
;; AUTHORITY SECTION:
com. 900 IN SOA a.gtld-servers.net. nstld.verisign-grs.com. 1632158403 1800 900 604800 86400
;; Query time: 26 msec
;; SERVER: 8.8.8.8#53(8.8.8.8)
;; WHEN: Mon Sep 20 18:20:23 IST 2021
;; MSG SIZE rcvd: 115
メモ2: (ping
の挙動調査)
getaddrinfo
コールの際に AI_IDN
が指定されているから、うんこ.com
でも問題なくIDNフォーマットに変換されてping
が飛ばせるらしい。
https://man7.org/linux/man-pages/man3/getaddrinfo.3.html
AI_IDN If this flag is specified, then the node name given in node is converted to IDN format if necessary. The source encoding is that of the current locale. If the input name contains non-ASCII characters, then the IDN encoding is used. Those parts of the node name
iputils の ping には getaddrinfo
フラグに AI_IDN
が指定されているが、USE_IDN
がないと Punycode 変換がされない。
しかし検証する限り最近のOSでは基本的に USE_IDN
があるので、うんこ.com
でもちゃんと ping
が飛ばせるらしい。
https://github.com/iputils/iputils/blob/7b389d0c21f243ae10c87b43910609af70ae9f66/ping/ping.h#L45
ロケールがCのとき、AI_CANONIDN
が外れるのが気になる。
https://github.com/iputils/iputils/blob/7b389d0c21f243ae10c87b43910609af70ae9f66/ping/ping.c#L298-L299
案の定、LANG
によってエンコードが失敗するので、OS のロケールによっては ping
ないし unko.ping
は正常に動作しない。。
$ LANG=C ping -c 1 うんこ.com
ping: うんこ.com: Parameter string not correctly encoded
$ LANG=C ./unko.ping
Success ping to poo.com
明示的に UTF-8 を使うように指定してあげれば大丈夫そう。
$ LANG=C.UTF-8 ./unko.ping
Success ping to うんこ.com
Success ping to うんち.com
Success ping to poo.com
︙
バグの検証と提案ありがとうございます。指摘通り修正を行いました。
_人人人人人人人人人人人人人人人人_
> unko.ping を oshiri に merge! <
 ̄Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^ ̄
👑
(💩💩💩)
(💩👁💩👁💩)
(💩💩💩👃💩💩💩)
(💩💩💩💩👄💩💩💩💩)
unko.ping
コマンドを追加しました。unko.csvの一覧のドメインにPingを送信します。 相手のサーバへの負荷がかからないようにコマンドラインオプションを設定しています。 Batsのテストも作成しましたが、コマンドの特性上どうしても実行に時間がかかってしまうのでコメントアウトしてあります。 ShellCheckやLintはテスト済みです。READMEに説明を追加してあります。Check list
test
) Please run tests and fix your code (see also: Testing)format
) Please run./linter.sh format-save
(see also: CodeStyle and lint)lint
) Please run linter and fix your code (see also: CodeStyle and lint)