私のPCを使って訪問するウェブサイトの公開IPを以下から得ることができるようにしたいと思います。
www.google.es - public IP1
www.cdn.facebook.com - public IP2
など。私はDNSトラフィックを記録してこれを行う必要があると思ったので、他の答えで見つけたソリューションの一部としてWiresharkを試しました。
tshark -f "udp port 53" -Y "dns.qry.type == A and dns.flags.response == 0"
しかし、これは私のルータと私のコンピュータ間の接続だけを表示するように見え、リストは次のペアで埋められます。
192.168.200.250 -> 192.168.200.1
192.168.200.1 -> 192.168.200.250`
答え1
DNSmasqをローカルにインストールし、このオプションをconfファイルに追加してから、log-facility=/var/log/dnsmasq.log
log-queries
システムをDNSリゾルバとして有効にできます127.0.0.1
。::1
私は効果的でした。
次に、目的の形式でデータを抽出し、目的の操作を実行します。
または、ローカルにバインディングをインストールしてください。ほとんどのディストリビューションでは、Bindのデフォルトインストールは非自動キャッシュであり、構成logging {}
ブロックを追加します(Bind 9で説明されているように)。構成リファレンス)。
答え2
この小さなスクリプトはあなたが探している結果を提供することができます。私はDNSルックアップを避け、実際のHTTPリクエスト(ポート80 / httpおよび443 / https)を使用することを好みます。
tshark -nlp -f '(port 80 or port 443) and (tcp[tcpflags] & (tcp-syn|tcp-ack)) == (tcp-syn|tcp-ack)' 2>/dev/null |
stdbuf -oL awk '{print $3}' |
while IFS= read -r ip
do
name=$(dig +short -x "$ip")
printf "%-16s%s\n" "$ip" "${name:-$ip}"
done |
uniq
出力例
212.58.244.27 bbc-vip146.telhc.bbc.co.uk.
78.129.164.123 free.hands.com.
195.20.242.89 195.20.242.89
このコードはHTTPリクエストの結果のみを生成し、DNSクエリを検索すると何も見つかりません。ただし、IPアドレスのrDNSルックアップを実行して名前を生成するため、訪問したHTTPホスト名と結果に返される名前が常に直接一致するわけではありません。