ICMP 에코 요청 서비스가 있나요?

ICMP 에코 요청 서비스가 있나요?

일반적으로 제가 개발하는 애플리케이션에는 네트워크의 다양한 장치에 대한 네트워크 상태 표시기를 포함하는 것을 좋아합니다. 이러한 장치를 모니터링하는 가장 쉬운 방법은 ping을 실행하는 것입니다. 그러나 원시 소켓의 보안 요구 사항 또는 ping.

내가 모니터링하는 대부분의 장치는 최소한의 네트워크 기능을 갖춘 내장형 장치이므로(항상 ICMP 에코가 포함됨)하다이 계약은 반드시 준수되어야 합니다.에코 프로토콜(마크가 아래 댓글에서 지적해 주셨네요. 감사합니다!) 평소에는 못 쓰거든요.

루트가 아닌 애플리케이션에 오버헤드가 낮은 ICMP ping 서비스를 제공할 수 있는 기존 서비스가 있습니까?

저는 루트로 실행되고 루트가 아닌 다른 응용 프로그램이 이에 연결하고, 모니터링할 장치를 추가한 다음, 핑 시간과 네트워크 상태를 쿼리할 수 있도록 허용하는 서비스를 작성하려고 합니다. 하지만 이를 다시 만들고 싶지는 않습니다. 바퀴, 그 물건이 이미 존재하는지 이런 것을 알고 싶습니다.

답변1

귀하의 질문에 대한 대답은 아마도 "아니요, 없습니다"일 것입니다.

그 이유는 ICMP가 낮은 수준의 프로토콜이고 ICMP 트래픽을 생성하려면 애플리케이션에 네트워크 인터페이스에 대한 권한 있는 액세스가 필요하기 때문입니다. ICMP를 생성하는 바이너리는 set-uid 루트이기 때문에 대부분의 시스템에서 이를 확인할 수 있습니다. 끈적 끈적한 부분에 유의하십시오.

$ ls -l /sbin/ping /usr/sbin/traceroute
-r-sr-xr-x  1 root  wheel  28088 Aug 12 12:19 /sbin/ping
-r-sr-xr-x  1 root  wheel  28608 Aug 12 12:20 /usr/sbin/traceroute

(이것은 FreeBSD에서 수행되었습니다. 결과는 다른 운영 체제에 따라 다를 수 있습니다.)

애플리케이션이 원시 네트워크 트래픽을 생성하려면 루트로 실행되어야 합니다. /sbin/ping이미 루트로 실행 중이므로 최선의 선택은 이를 사용하여 핑을 생성하는 것입니다 .

많은 수의 호스트에 대해 이 작업을 수행하는 경우 다음을 살펴보는 것이 좋습니다.평평한. 또 다른 옵션은TCPing, TCP 패킷을 생성하여 ICMP ping과 유사한 결과를 제공할 수 있습니다. 요구 사항은 패킷을 수신하기 위해 대상 시스템에 열린 포트가 있어야 한다는 것입니다. 이 방법을 사용하셔도 되고, 소스에 따라 복사하셔도 됩니다. 두 가지 모두 이미 운영 체제용 패키지로 제공될 수 있습니다.

대규모 모니터링 솔루션의 경우,나기오스그리고자비크스인기 있는 무료 옵션이지만 다른 옵션도 많이 있습니다.

답변2

원하는 내용에 비해 너무 비대해 보일 수도 있지만 대부분의 성숙한 모니터링 솔루션(예: Nagios, icinga 또는 check_mk)은 icmp 모니터링을 제공하고 일반적으로 쿼리할 수 있는 API를 제공합니다.

답변3

ICMP 에코는 긍정적인 응답이기 때문에 좋지만 원격 컴퓨터에서 이러한 테스트를 제공하는 경우 시스템 활동 테스트에 부정적인 응답(예: 포트 연결 불가 및 프로토콜 연결 불가)을 사용할 수 있습니다. 노력하다:

  • connect()사용되지 않는 TCP 포트에 액세스
  • send()사용하지 않는 UDP 포트에 연결

setsockopt(fd, IP_RECVERR, ...)오류를 완전히 복구하려면 다음을 수행할 수 있어야 하며 , 오류 자체를 수신하려면 특수 옵션을 사용할 수 있어야 합니다. (Linux에서는 매뉴얼 페이지를 참조하십시오 ip(7).)

답변4

ping이 오래된 질문에 대한 업데이트된 답변으로, 2019년부터 루트 권한 없이 요청을 수행 할 수 있는 Linux 기반 플랫폼에서 사용자 수준 애플리케이션을 만드는 것이 가능해졌습니다 .

ls -l /bin/ping
-rwxr-xr-x 1 root root 55720 Mar  8  2021 /bin/ping

ping -c1 google.co.uk
PING google.co.uk(lhr48s27-in-x03.1e100.net (2a00:1450:4009:815::2003)) 56 data bytes
64 bytes from lhr35s11-in-x03.1e100.net (2a00:1450:4009:815::2003): icmp_seq=1 ttl=119 time=13.0 ms

--- google.co.uk ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 13.047/13.047/13.047/0.000 ms

setuid 및 기능 없이 Fedora에서 Ping은 어떻게 작동합니까?

Linux 커널의 net.ipv4.ping_group_rangesysctl 매개변수는 ping추가 권한이나 기능 없이 패킷을 보내고 받을 수 있는 사용자 그룹의 숫자 범위를 정의합니다.

관련 정보