Wenn dann müsste doch mit dem Ergebnis aus: htmlspecialchars (
$shell
) irgendetwas noch gemacht werden?
Aber klar! Das ist Text, den ein Programm erzeugt hat, der also (je nach Programm: in gewissen Grenzen) immer gleichförmig ist.
Nehmen wir:
~> host google.com 8.8.8.8
Das wirft:
Using domain server: Name: 8.8.8.8 Address: 8.8.8.8#53 Aliases:
google.com has address 85.182.250.20 google.com has address 85.182.250.54 google.com has address 85.182.250.45 google.com has address 85.182.250.59 google.com has address 85.182.250.34 google.com has address 85.182.250.50 google.com has address 85.182.250.24 google.com has address 85.182.250.40 google.com has address 85.182.250.44 google.com has address 85.182.250.49 google.com has address 85.182.250.55 google.com has address 85.182.250.29 google.com has address 85.182.250.30 google.com has address 85.182.250.25 google.com has address 85.182.250.39 google.com has address 85.182.250.35 google.com has IPv6 address 2a00:1450:4013:c01::8a google.com mail is handled by 40 alt3.aspmx.l.google.com. google.com mail is handled by 30 alt2.aspmx.l.google.com. google.com mail is handled by 10 aspmx.l.google.com. google.com mail is handled by 50 alt4.aspmx.l.google.com. google.com mail is handled by 20 alt1.aspmx.l.google.com.
nehmen wir:
~$ host wiki.selfhtml.org 8.8.4.4 Using domain server: Name: 8.8.4.4 Address: 8.8.4.4#53 Aliases:
wiki.selfhtml.org has address 217.11.54.57
Alles. Klar: Die Ausgaben noch durch ein "grep" jagen"
host google.com 8.8.8.8 | grep "has adress" (wir nehmen nur die Zweilen, wo das drin steht...
Dann noch durch cut: (wir brauchen die 4. Spalte der durch Leerzeichen getrennten Tabelle)
~$ host google.com 8.8.8.8 | grep "has address" | cut -d " " -f4
85.182.250.152 85.182.250.167 85.182.250.178 85.182.250.168 85.182.250.177 85.182.250.148 85.182.250.173 85.182.250.157 85.182.250.162 85.182.250.187 85.182.250.163 85.182.250.172 85.182.250.158 85.182.250.182 85.182.250.153 85.182.250.183
Woop! Machen wir PHP daraus:
$shell = '[host](http://unixhelp.ed.ac.uk/CGI/man-cgi?host) ' . escapeshellarg( trim( $abfrage ) ) . ' ' . $dnsServer . ' | [grep](http://unixhelp.ed.ac.uk/CGI/man-cgi?grep) "has address" | [cut](http://unixhelp.ed.ac.uk/CGI/man-cgi?cut) -d " " -f4';
$arErgebnisse=exlode("\n", `$shell`);
if count($arErgebnisse) {
# Was immer Du damit tun willst. z.B. das Erste ausgeben:
echo 'IP: ', htmlspecialchars(trim($arErgebnisse[0]));
} else {
# Tja. Da war nichts.
}
Ergebnis:
IP: 85.182.250.152
Ach so. Das Trimmen ist wichtig. Zumindest in meinem Terminal kommen da immer mal sehr lange Zeilen zurück.
Jörg Reinholz