내 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 호스트 이름과 결과에 반환된 이름이 항상 직접적으로 일치하는 것은 아닙니다.