2016-08-21 2 views
1

도메인 이름이있는 데이터 프레임이 있습니다. 도메인 이름을 핑 (ping)하여 존재하는 도메인을보고 싶습니다. 다음 기능에서 개별 핑 응답을받을 수 있습니다.Qing 응답을 받으려면 R

ping <- function(x,stderr=FALSE,stdout=FALSE,...){ 
pingvec <- system2("ping",x, 
       stderr=FALSE, 
       stdout=FALSE,...) 
if (pingvec == 0) TRUE else FALSE 
} 



ping("google.com") 
[1] TRUE 

수천 개의 도메인 이름이있는 전체 열에 대해 ping 응답을받을 수있는 R 패키지가 있습니까?

답변

5

system() 명령을 사용하는 것은 좋지 않습니다 위해 할 수있는 - 모든 프로그래밍 언어에서 일반적으로. main reasons은 보안 및 이식성 문제입니다. pingr::ping()pingr:::ping_os()가 나타나는 기능의 소스 코드를 보면

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 

편집/코멘트

:

pingr 패키지는 R 내에서 원격 서버를 ping 할 수있는 가능성을 제공 패키지 으로 전화를 걸어 system()으로 전화하십시오. 따라서 security concerns remain은 OS 기능 ping이 완전히 다른 무언가를 해칠 수 있으므로 재정의 할 수 있다고 생각합니다. 패키지에 따라 해결되는 것으로 보이는 것은 이식성 문제입니다. OS에 따라 다른 메소드가 호출되기 때문입니다.

+0

'system '을 호출하는 것이 보안 문제인지 여부는 컨텍스트에 따라 다릅니다. 제어가없는 임의의 기계에서 코드가 실행되고 있다면, 'ping'은 다른 것으로 재 정의 될 수 있고 보안 문제가 있습니다. 자신의 컴퓨터에서 여러 개의 주소로 핑 (ping)을하려면 문제가되지 않습니다. –

+0

매우 느립니다. 시간이 많이 걸리는 다른 방법이 더 빠릅니까? 그리고 나서 어떤 웹 사이트가 핑하지 않는지보고 싶습니다. – Neil

+0

@Neil ping timeout은 시스템 수준에서 변경할 수 있습니다. 리눅스 시스템에서이 시간을 줄일 수있는 옵션은'ping -i 0.2'입니다. 'URL <- paste ("- i 0.2", URLs)'를 사용하여 pingr에이 옵션을 전달할 수 있습니다. 이렇게하면 기능이 빨라집니다. 다른 OS의 옵션에 대해 알지 못합니다. – RHertel

2

우리는 Vectorize와 포장 및 여러 요소

ping1 <- Vectorize(ping) 
ping1(c("yahoo.com", "google.com")) 
ping1("google.com") 
관련 문제