У меня сантехник работает на компьютере в той же сети. Иногда происходит сбой запроса, и я хотел бы определить причину:
- Компьютер выключен
- сантехник не работает на данном порту
- Код в сантехнике Сбой
Поэтому (в случае сбоя запроса сантехника) я подумал, что смогу: 1. Пинговать сантехник на заданном порту 2. Если не получится, я пингую компьютер (без указанного порта c)
Что я пробовал.
Убедитесь, что сантехник работает.
url <- paste0("http://192.168.1.11:7192/echo")
> httr::GET(url = url, body = "msg=asd") %>% content
$msg
$msg[[1]]
[1] "The message is: ''"
Так что все работает, теперь попробуйте "пинг". После Пингует сайт в R :
ping <- function(x, stderr = FALSE, stdout = FALSE, ...){
pingvec <- system2("ping -n 1", x,
stderr = FALSE,
stdout = FALSE,...)
if (pingvec == 0) TRUE else FALSE
}
> ping(url)
[1] FALSE
Warning message:
In system2("ping -n 1", x, stderr = FALSE, stdout = FALSE, ...) :
'"ping -n 1"' not found
> ping("http://192.168.1.11")
[1] FALSE
Warning message:
In system2("ping -n 1", x, stderr = FALSE, stdout = FALSE, ...) :
'"ping -n 1"' not found
> RCurl::url.exists(url)
[1] FALSE
, что не удается.
Попытка «вручную»:
system("ping -n 1 192.168.1.11")
Ping wird ausgefhrt fr 192.168.1.11 mit 32 Bytes Daten:
Antwort von 192.168.1.11: Bytes=32 Zeit=4ms TTL=64
Ping-Statistik fr 192.168.1.11:
Pakete: Gesendet = 1, Empfangen = 1, Verloren = 0
(0% Verlust),
Ca. Zeitangaben in Millisek.:
Minimum = 4ms, Maximum = 4ms, Mittelwert = 4ms
[1] 0
> system("ping -n 1 192.168.1.112")
Ping wird ausgefhrt fr 192.168.1.112 mit 32 Bytes Daten:
Antwort von 192.168.1.145: Zielhost nicht erreichbar.
Ping-Statistik fr 192.168.1.112:
Pakete: Gesendet = 1, Empfangen = 1, Verloren = 0
(0% Verlust),
[1] 0
Текст указывает, что .11 работает, а .112 не существует, что является правильным.
Грязное решение:
ping2 <- function(host){
res <- system(command = paste0("ping -n 1 ", host), intern = TRUE)
!sum(grepl(pattern = "nicht erreichbar", x = res))
}
host <- "192.168.1.11"
ping2(host)
Однако это не работает для проверка порта: (здесь порт 999999 не открыт).
host <- "192.168.1.11:999999"
ping2(host)
TRUE
Вопрос:
Как отладить API моего сантехника - в частности, как я должен пинговать хост а порт?