골랑 핑 구현

王林
풀어 주다: 2023-05-16 16:13:38
원래의
1257명이 탐색했습니다.

Go 언어(Golang)는 효율성, 확장성 및 배포 용이성으로 잘 알려진 매우 인기 있는 프로그래밍 언어입니다. Go 프로그램에서 Ping 도구를 구현하면 네트워크 연결 상태를 감지하여 네트워크 성능을 최적화하고 네트워크 오류를 줄이는 데 도움이 될 수 있습니다. 이번 글에서는 Go 언어를 사용하여 Ping 도구를 구현하는 방법을 알아봅니다.

Ping은 대상 서버에 ICMP 메시지를 보내고 응답을 받아 네트워크 연결을 테스트하는 잘 알려진 네트워크 진단 도구입니다. Ping 도구를 구현하는 두 가지 일반적인 방법이 있습니다.

  1. Linux에서 ping 명령을 사용하는 것과 같이 시스템에서 제공하는 ping 유틸리티를 사용합니다.
  2. 프로그램에서 직접 ICMP 패킷을 생성하고 보낸 다음 네트워크 응답을 받습니다.

이 기사에서는 Go 언어를 사용하여 Ping 도구를 구현하는 두 번째 방법에 대해 설명합니다.

구현 과정

Go 언어에서는 net 패키지의 Ping() 함수를 사용하여 Ping 도구를 구현할 수 있습니다. 이 함수는 매개변수로 IP 주소나 호스트 이름이 필요하며 bool 값을 반환합니다.

먼저 net 패키지를 가져와야 합니다.

import "net"
로그인 후 복사

다음으로 Ping 기능을 구현하기 위해 다음 코드를 작성할 수 있습니다.

func ping(host string) bool {
  conn, err := net.Dial("ip4:icmp", host)
  if err != nil {
    fmt.Println(err)
    return false
  }
  defer conn.Close()

  msg := make([]byte, 28)
  msg[0] = 8 // echo
  msg[1] = 0 // code
  msg[2] = 0 // checksum
  msg[3] = 0 // checksum
  msg[4] = 0 // identifier[0]
  msg[5] = 13 // identifier[1]
  msg[6] = 0 // sequence[0]
  msg[7] = 37 // sequence[1]
  len := len(msg)
  checksum := checkSum(msg, len)
  msg[2] = byte(checksum >> 8)
  msg[3] = byte(checksum & 255)
  t1 := time.Now()
  conn.SetDeadline(t1.Add(time.Second))
  _, err = conn.Write(msg)
  if err != nil {
    fmt.Println(err)
    return false
  }
  recv := make([]byte, 1024)
  _, err = conn.Read(recv)
  if err != nil {
    fmt.Println(err)
    return false
  }
  t2 := time.Now()
  fmt.Println("RTT:", t2.Sub(t1))
  return true
}

func checkSum(msg []byte, len int) uint16 {
  sum := 0
  for n := 1; n < len-1; n += 2 {
    sum += int(msg[n])*256 + int(msg[n+1])
  }
  sum = (sum >> 16) + (sum & 0xffff)
  sum += (sum >> 16)
  return uint16(^sum)
}
로그인 후 복사

이 코드에서는 먼저 net.Dial() 함수를 사용하여 대상 호스트. 연결이 성공하면 ICMP 패킷을 빌드하여 대상 호스트로 보냅니다. 그런 다음 네트워크 응답을 기다리고 왕복 시간을 계산합니다. 마지막으로 핑 요청이 성공했는지 여부를 나타내는 부울 값을 반환합니다.

Notes

Ping 기능을 사용하려면 더 높은 보안 권한이 필요하다는 점에 유의하세요. Windows 환경에서 Ping 기능을 사용하려면 관리자 권한으로 프로그램을 실행해야 합니다. Linux 및 Unix 환경에서는 루트 권한이 필요합니다.

또한 Ping 기능은 시스템 네트워크 설정과 호환되어야 합니다. 사용 중인 컴퓨터나 네트워크가 보안 제한 대상인 경우 대상 호스트에 연결하지 못할 수도 있습니다. 대상 호스트에 연결할 수 없는 경우 네트워크 관리자에게 문의하세요.

요약

이 글에서는 Go 언어를 사용하여 Ping 도구를 구현하는 방법을 배웠습니다. Ping은 네트워크 연결 상태를 테스트하고 네트워크 성능을 최적화하는 데 도움이 되는 매우 유용한 네트워크 진단 도구입니다. Go 언어를 사용하여 Ping 기능을 구현하는 것은 매우 쉽습니다. net 패키지에서 Ping() 기능만 사용하면 됩니다. 또한 권한 및 네트워크 설정 문제와 같은 몇 가지 고려 사항에 대해서도 논의합니다. 이 기사가 Ping 도구 구현과 Go 언어 적용을 더 잘 이해하는 데 도움이 되기를 바랍니다.

위 내용은 골랑 핑 구현의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!