Auch NMAP bietet Scripts. Das hilft dir vl. https://nmap.org/nsedoc/scripts/http-headers.html
Output kannst du dann mittels Pipeline an Grep senden welches dir dann die IP und den Host (aus dem HTTP-Header) filtert und dann mittels > xyz.txt dieses direkt in ein File. Die die keine Host-Zeile mitschicken kannst du dann manuell über ein Reverse Lookup abfragen.
Natürlich kannst du auch nur Port 80 und 443 abscannen. Hier wird halt nicht geprüft ob ein HTTP-Service läuft und Domains werden auch keine gegrabt. Allerdings kannst du da wiederum mittels dem Parameter -sV nach den Services scannen. Mit -sL kannst du den Hostname (meistens gleich der Domain) abfragen.
Beispiel: nmap -sV -sL -p 80,443 10.0.0.1/24
Scannt 10.0.0.1 - 10.0.0.256
Oder 1000 zufällige IPs: nmap -sV -sL -p 80,443 -iR 1000
Für Scans des gesamten Internets ist allerdings zmap (nicht mit ZenMap zu verwechseln) besser.
Beispiel: zmap -p 80,443
Mittels -n 10 kannst du den Scan auf 10 IPs limitieren. Die Entwickler haben auch einen Bannergrab für HTTP-Server implementiert.
Hier ein Beispiel von deren Doku. -N definiert die Anzahl der Resultate und -B die verwendete Bandbreite im Bytes (also 10MB). Das Output wird in das File out geschrieben.
zmap -p 80 -N 1000 -B 10M -o - | ./banner-grab-tcp -p 80 -c 500 -d ./http-req > out