sedを使用してpingコマンドからIPアドレスを抽出しますか? [繰り返し]

sedを使用してpingコマンドからIPアドレスを抽出しますか? [繰り返し]

サーバー上で実行されるBashツールを作成しました。このツールは、特定の時間範囲(午前5時から午後3時30分まで)内の特定のIPアドレスをブロックします。

現時点では、このツールはうまく機能しますが、特定のWebサイトのIPアドレスをテキストファイルに手動で入力し、ツールに "head"と"tail"コマンドを使用してn行目に基づいてIPアドレスを抽出する必要があります。私は単一のpingがより軽くて携帯性が良いと信じているので、これをしたくありません。したがって、Googleにpingを実行すると、次のようになります。

ping google.com -c 1 -s 16

出力は次のとおりです。

Ubuntu@yokai:~# ping google.com -c 1 -s 16
PING google.com (173.194.66.138) 16(44) bytes of data.
24 bytes from qo-in-f138.1e100.net (173.194.66.138): icmp_seq=1 ttl=37 time=46.7 ms

--- google.com ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 46.748/46.748/46.748/0.000 ms

出力範囲を絞り込むコマンドは次のとおりです。

ping google.com -c 1 -s 16 | grep -o '([^ ]*' | tr -d '(44):\n'

これは私に出力を与えます:

173.19.66.113173.19.66.113ubuntu@yokai

ご覧のとおり、同じIPアドレスが重複しています。単一のIPアドレスを変数に保存し、スクリプトをcronjobとして実行できるようにsedを使用して重複を削除するにはどうすればよいですか?それとも、より良い追跡のためにtrを使用できますか?

(編集する)

ホスト名またはドメインでIPアドレスを解決する方法を既に知っています。私がここに尋ねるのはそうではありません。この質問は、特に私が作成したツールの移植性を高めるためにsedを使用してping出力を管理することです。 pingはほぼすべてのLinuxディストリビューションのデフォルト値であるためです。

(更新)一部の人々は、この質問をそれとは何の関係もない他の無駄な質問の重複としてマークしたので、英語を理解するのが難しい精神遅滞者が理解できるように十分に明確に説明します。

どのように分析するこれ「唯一の」IPアドレス~からping 出力pingドメイン名に使用される場合。

ドメイン名を解決するための要求ではないので、重複ではありません!

sed(最新のアップデート)この質問で必要なことを達成するための正しいPOSIX正規表現を学んだので、元々はping出力から単一のIPインスタンスを印刷するための正規表現について質問したことを明確にする必要があります。それ以来、私はアプローチを改善し、ここで答えを使用しなくなりましたが、ここで助けを求めるすべての人の努力に感謝します。これで、特定のドメイン名解決をブロックするために、特定の時間にiptablesを設定するために作成したタイマースクリプトを使用しています。助けてくださった皆様にもよろしくお願いします。

ベストアンサー1

pingICMP応答に基づいてホストが動作しているか無効になっているかを確認するために使用され、IPアドレスを確認するのに適したツールではなく、この目的のための特別なツールがあります。

あなたはそれを見なければなりませんdighost-nslookupあなたに最適なものは何でも良いです。

これはdig出力です:

% dig +short google.com
123.108.243.57
123.108.243.51
123.108.243.54
123.108.243.48
123.108.243.60
123.108.243.52
123.108.243.56
123.108.243.55
123.108.243.61
123.108.243.58
123.108.243.49
123.108.243.50
123.108.243.59
123.108.243.47
123.108.243.53

参考までに、Linux上でNSSwitch(ネームサービススイッチ)を介して照会するには、データベースと共に(または)コマンドを/etc/nsswitch使用します。例:getenthostsahosts

getent hosts google.com

マイコンピュータには次のものがあります。

hosts: files mdns4 dns

そのため、順番に照会して使用するか、/etc/nsswitch.conf名前に基づいて使用します。getent hostsgethostbyaddr(3)gethostbyname(3)ahostsgetaddrinfo(3)

デフォルトでは、私の設定に従って最初にチェックし、/etc/hostsmDNSをチェックし、最後にDNSをチェックします。


pingand 使用にこだわったら、sed次のようにすることができます。

% ping -c1 google.com | sed -nE 's/^PING[^(]+\(([^)]+)\).*/\1/p'
123.108.243.56

おすすめ記事