Es tun, ist keine gute Idee, system()
Befehle verwenden - in der Regel in einer beliebigen Programmiersprache. Die main reasons sind Sicherheit und Portabilitätsprobleme.
Das pingr
Paket bietet eine Möglichkeit, einen Remote-Server innerhalb von R zu ping:
library(pingr)
URLs <- c("google.com", "yahoo.com")
sapply(URLs, ping)
# google.com yahoo.com
#[1,] 14.6 171
#[2,] 14.7 171
#[3,] 14.6 171
bearbeiten/Kommentar
Mit Blick auf den Quellcode der Funktionen pingr::ping()
und pingr:::ping_os()
es erscheint dass das Paket einen Anruf an system()
verwendet. Daher denke ich, dass security concerns remain, da die OS-Funktion ping
neu definiert werden könnte, etwas völlig anderes und möglicherweise schädlich zu tun. Was das Paket zu lösen scheint, sind Portabilitätsprobleme, da je nach Betriebssystem unterschiedliche Methoden aufgerufen werden.
Ob der Aufruf von 'system' ein Sicherheitsproblem ist, hängt vom Kontext ab. Wenn der Code auf beliebigen Rechnern ausgeführt wird, auf die Sie keinen Einfluss haben, dann könnte "ping" als etwas anderes neu definiert werden und es gibt ein Sicherheitsproblem. Wenn Sie eine Reihe von Adressen von Ihrem eigenen Computer aus anpingen möchten, ist das kein Problem. –
Es ist sehr langsam. Nehmen wir viel Zeit, gibt es einen anderen Weg, der schneller ist? Und dann möchte ich sehen, welche Websites nicht pingt. – Neil
@Neil Das Ping-Timeout kann auf Systemebene geändert werden. In Linux-Systemen wäre eine Option, diese Zeit zu reduzieren, "ping -i 0.2". Sie könnten diese Option an pingr übergeben, indem Sie 'URLs <- einfügen (" - i 0.2 ", URLs)' verwenden. Dies sollte die Funktion beschleunigen. Ich weiß nichts über Optionen auf anderen Betriebssystemen. – RHertel