获取访问网页的公共IP?

获取访问网页的公共IP?

我希望能够通过以下方式获取我使用 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然后将您的系统设置为使用127.0.0.1::1作为 DNS 解析器,它对我有用。

然后将数据提取为您想要的任何格式,并用它做您想做的事情

或在本地安装 Bind。大多数发行版默认安装的 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 主机名与结果中返回的名称之间并不总是存在直接对应关系。

相关内容