본문 바로가기
IT·컴퓨터

네트워크 바이트 오더 확인 방법(python)

by 기부전사 2024. 4. 8.

신입들이 가끔 TCP/IP 방식으로 장치들 간 통신을 구현할 때,

 

데이터가 아주 엉망진창일 때가 있다며 울상을 지을 때가 왕왕 있다.

 

그 원인 중 하나는 네트워크 바이트 오더가 달라서 발생하는 것으로,

 

파이썬의 socket 모듈로 네트워크 바이트 오더를 확인해보자...

 

import socket

def check_network_byte_order():
    # Create a socket
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

    # Get the byte order of the system
    byte_order = s.getsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST)

    # Check if the system uses big-endian or little-endian
    if byte_order == 0:
        print("System uses little-endian (network byte order)")
    else:
        print("System uses big-endian")

    # Close the socket
    s.close()

# Call the function to check the network byte order
check_network_byte_order()

 

import socket: socket 모듈을 불러오기


def check_network_byte_order()

check_network_byte_order라는 함수를 정의. 이 함수는 시스템의 네트워크 바이트 순서를 확인하는 역할을 합니다.


s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

-  소켓 생성. AF_INET은 IPv4 주소 체계를 사용하고, SOCK_STREAM은 TCP 소켓을 생성하도록 지정합니다.


byte_order = s.getsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST)

- getsockopt 함수를 사용하여 시스템의 바이트 순서를 가져옵니다. SO_BROADCAST는 브로드캐스트 소켓 옵션을 나타냅니다.

 

if byte_order == 0

시스템이 리틀 엔디안인지 빅엔디안인지 확인합니다. byte_order 값이 0이면 리틀 엔디안을 사용하고, 그렇지 않으면 빅엔디안을 사용합니다.


print("System uses little-endian (network byte order)")

시스템이 리틀 엔디안을 사용한다면 해당 메시지를 출력합니다.


else

그렇지 않은 경우 (시스템이 빅엔디안을 사용하는 경우) 다음 라인을 실행합니다.

 

print("System uses big-endian"): 시스템이 빅엔디안을 사용한다면 해당 메시지를 출력합니다.

 

s.close(): 소켓을 닫습니다.

 

check_network_byte_order(): 함수를 호출하여 네트워크 바이트 순서를 확인합니다.

 

 

반응형