Pour obtenir des noms complets d'hôtes pour les adresses IPv4, je redirige netstat -anp tcp
via Python, en revenant à l'IP si aucun n'est disponible-
tidy_netstat.py:
#!/usr/bin/env python3
import re
import socket
import sys
ip_cache = dict()
NS_ADDYS = re.compile(r"^(\w+).*\D(\d+\.\d+\.\d+\.\d+)\.\d+\s+(\d+\.\d+\.\d+\.\d+)\.\d+\s+(\S.+)$")
def get_ipv4_host(ip):
if ip in ip_cache:
return ip_cache[ip]
try:
info = socket.gethostbyaddr(ip)
except socket.herror:
return
if info and info[0]:
ip_cache[ip] = info[0]
return info[0]
while line := sys.stdin.readline():
res = NS_ADDYS.match(line)
if res:
proto, srcip, dstip, state = res.groups()
if proto != 'tcp4':
continue
srchost, dsthost = get_ipv4_host(srcip), get_ipv4_host(dstip)
print("\t".join((srchost or srcip, dsthost or dstip, state)))
Il y a probablement de meilleures façons de faire, mais ça fonctionne pour moi.
Combiné avec un exécuteur périodique, tel que watch, cela devient un moyen utile pour voir ce que fait votre machine et ses applications.
% watch -d sh -c "'netstat -anp tcp | ./tidy_netstat.py'"
J'ai une tâche cron qui écrit périodiquement le dsthost dans une table sqlite avec un compteur, juste pour voir où ma machine a été au fil du temps.
Ce qui est vraiment intéressant, c'est que je le lance juste après le démarrage, ou après avoir quitté tous les programmes GUI, et il y aura une ou deux connexions à des hôtes non nommés!
par ex. 17.57.144.23 - presque toujours elles appartiennent à un bloc IP Apple, comme celui-ci dans 17.0.0.0/9.
Depuis lors, je garde un oeil sur ces connexions-
% sudo tcpdump -vvvv -s 99999 -w /tmp/apple.pcap -i en5 net 17.0.0.0/9
Mais elles ont toutes été en TLS, jusqu'à présent, aucune donnée visible. (Pour votre information, je n'ai pas activé Localiser mon Mac).