아두이노 Arduino/파이썬(Python)

Ping이란? CMD, 파이썬으로 예제 실습하기(Window OS)

끄적끄적아무거나 2023. 12. 20. 13:27
반응형

 

목차

     

     

     

    핑(Ping)이란?

     

    핑(Ping) 명령어는 네트워크 장치 간의 연결 상태와 통신 속도를 검사하는 데 주로 사용되는 도구입니다. 핑은 인터넷 제어 메시지 프로토콜(ICMP) 에코 요청 메시지를 목적지 컴퓨터에 보내고 응답을 기다리는 방식으로 작동합니다. 이 과정을 통해 두 가지 주요한 정보를 얻을 수 있습니다: 응답이 얼마나 반환되었는지, 그리고 그 응답이 반환되기까지 얼마나 걸렸는지입니다.

     

    1. 시간 초과(Timeouts)와 패킷 손실(Packet Loss)

    • 응답이 없거나 지연되는 경우, 이를 '시간 초과'라고 합니다. 이는 대상 장치가 오프라인이거나, 네트워크 경로에 문제가 있음을 나타낼 수 있습니다.
    • 패킷 손실은 보낸 패킷 중 일부가 목적지에 도달하지 못하는 경우를 말합니다. 이는 네트워크 혼잡, 하드웨어 문제, 또는 잘못된 구성 등 다양한 원인으로 발생할 수 있습니다.

     

     

    2. 라운드트립 시간(Round-Trip Time, RTT)

    • 핑이 응답을 받는 데 걸리는 시간을 RTT라고 합니다. 이 시간은 네트워크의 지연 시간을 나타내며, 일반적으로 밀리초(ms) 단위로 표시됩니다.
    • 높은 RTT 값은 네트워크 지연이 크다는 것을 의미하며, 이는 데이터 전송 속도가 느림을 나타냅니다.

     

     

    3. 핑을 사용하는 이유

    • 네트워크 연결 문제 해결: 네트워크 문제 해결 시, 핑은 기본적인 진단 도구로 사용됩니다. 예를 들어, 인터넷이 작동하지 않을 때 라우터나 웹사이트 서버에 핑을 보내 연결 상태를 확인할 수 있습니다.
    • 네트워크 성능 모니터링: 네트워크 관리자는 핑을 사용하여 네트워크의 성능과 안정성을 지속적으로 모니터링합니다.

     

     

    4. 핑의 한계

    • 일부 서버나 장치는 보안상의 이유로 ICMP 요청을 차단할 수 있습니다. 이 경우, 핑은 응답을 받지 못하더라도 해당 서버나 장치가 오프라인인 것은 아닙니다.
    • 핑은 네트워크의 전반적인 성능을 측정하지 않습니다. 예를 들어, 대역폭(bandwidth) 문제나 고급 네트워크 문제를 진단하는 데는 적합하지 않습니다.

     

    핑은 네트워크 진단과 모니터링에서 기본적이지만 필수적인 도구로, 네트워크의 상태와 연결성을 빠르게 확인할 수 있는 간편한 방법을 제공합니다.

     

    참고로 /?을 사용해서 help와 같이 각종 option의 정보를 아래와 같이 받을 수 있다.

    C:\Users\forgo>ping /?
    
    Usage: ping [-t] [-a] [-n count] [-l size] [-f] [-i TTL] [-v TOS]
                [-r count] [-s count] [[-j host-list] | [-k host-list]]
                [-w timeout] [-R] [-S srcaddr] [-c compartment] [-p]
                [-4] [-6] target_name
    
    Options:
        -t             Ping the specified host until stopped.
                       To see statistics and continue - type Control-Break;
                       To stop - type Control-C.
        -a             Resolve addresses to hostnames.
        -n count       Number of echo requests to send.
        -l size        Send buffer size.
        -f             Set Don't Fragment flag in packet (IPv4-only).
        -i TTL         Time To Live.
        -v TOS         Type Of Service (IPv4-only. This setting has been deprecated
                       and has no effect on the type of service field in the IP
                       Header).
        -r count       Record route for count hops (IPv4-only).
        -s count       Timestamp for count hops (IPv4-only).
        -j host-list   Loose source route along host-list (IPv4-only).
        -k host-list   Strict source route along host-list (IPv4-only).
        -w timeout     Timeout in milliseconds to wait for each reply.
        -R             Use routing header to test reverse route also (IPv6-only).
                       Per RFC 5095 the use of this routing header has been
                       deprecated. Some systems may drop echo requests if
                       this header is used.
        -S srcaddr     Source address to use.
        -c compartment Routing compartment identifier.
        -p             Ping a Hyper-V Network Virtualization provider address.
        -4             Force using IPv4.
        -6             Force using IPv6.

     

     

     

     

     

    핑(Ping) 윈도우 환경에서 실습

     

    참고로 아래에 사용한 명령어에 대한 옵션들은 윈도우(Window)에서 적용되는 Option 값입니다. Linux와 같은 환경에서는 다른 옵션을 사용하셔야 합니다. 

     

    C:\Users\forgo>ping -n 1 -w 1 192.168.100.100
    
    Pinging 192.168.100.100 with 32 bytes of data:
    Reply from 192.168.100.100: bytes=32 time=19ms TTL=64
    
    Ping statistics for 192.168.100.100:
        Packets: Sent = 1, Received = 1, Lost = 0 (0% loss),
    Approximate round trip times in milli-seconds:
        Minimum = 19ms, Maximum = 19ms, Average = 19ms

     

     

    명령을 설명하면 -n에서 1은 한번의 패킷만을 보내겠다는 의미입니다. -w에서 1은 1초간 응답을 기다리겠다는 의미입니다. 

     

    결과는 위와 같이 정상적으로 응답이 들어왔습니다.

     

     

     

     

     

    핑(Ping) 파이썬에서 실습

     

    import subprocess
    
    def ping_ip(ip_address):
        try:
            # Ping the specified IP address
            response = subprocess.run(["ping", "-n", "1", "-w", "1", ip_address], stdout=subprocess.PIPE, stderr=subprocess.PIPE)
    
            # Check if the ping was successful
            if response.returncode == 0:
                print("Okay")
            else:
                print("Ping failed")
        except FileNotFoundError:
            print("Ping command not found. Please ensure you have ping available in your environment.")
    
    # Replace with the IP address you want to ping
    ip_address = "192.168.100.100"
    ping_ip(ip_address)

     

     

    위 코드는 앞서 CMD에서 실행한 명령을 subprocess 함수를 사용해서 동일하게 실행하였습니다.

     

    정상적인 응답이 들어올 경우 Okay를 출력하고 아닐 경우 Ping failed이 출력되게 작성하였습니다. 

     

     

    예제 코드 다운 로드>>

    test00.py
    0.00MB

     

     

    반응형