local host Name 및 IP , Remote Host 와 IP 구하기
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | import socket def print_mynetwork_info(): host = socket.gethostname() ip_addr = socket.gethostbyname(host) print('HOST:' + host) print("ip Address:" + ip_addr) def print_remoteNetwork_info(): remote_host = 'www.naver.com' remote_ip = socket.gethostbyname(remote_host) try: print(remote_host) print(remote_ip) except socket.error as identifier: print('error msg:' + expression) #예외 무시 pass except: print('all eror') #예외 무시 pass finally: print('end') if __name__ == '__main__': print_mynetwork_info() print_remoteNetwork_info() | cs |
>>
HOST:myHost
ip Address:192.168.0.24
www.naver.com
210.89.160.88
end
로우 레벨의 네트워크 함수를 다루는 경우 IP 주소의 일반적인 문자열 표기 방식은 많이 사용하지 않는다. 이 문자열을 32비트의 바이너리 형식으로 변경해야한다.
IPv4 주소를 다른 포맷으로 변환
파이썬의 소켓 라이브러리는 여러가지 IP주소포맷을 다룰 수 있는 유틸리티 함수를 가지고 있고, 여기서 inet_aton()과 inet_ntoa()를 사용할 수 있다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | import socket from binascii import hexlify def convert_ipAddress(): host = socket.gethostname() ipAddr = socket.gethostbyname(host) packed_ip = socket.inet_aton(ipAddr) unppcked_ip = socket.inet_ntoa(packed_ip) print(ipAddr) #바이너리 데이터를 16진수로 표현 print(hexlify(packed_ip)) print(unppcked_ip) if __name__ == '__main__': convert_ipAddress() | cs |
>>
192.168.0.24
b'c0a80018'
192.168.0.24
호스트와 네트워크 바이트 순서에 맞게 정수 변환
호스트의 운영체제로부터 얻은 데이터를 네트워크 바이트 순서로 변환하거나 반대로 변환하는 작업을 수행하는 경우가 있는데, 운영체제 혹은 네트워크 환경에 따라 데이터의 포맷의 표현방식이 각자 다르기 때문이다.
네트워크 바이트 순서 = 시스템이 내부적으로 데이터를 표현하는 방법
1 2 3 4 5 6 7 8 9 10 11 | import socket def convert_integer(): data=1234 # 32-bit long print ('original: %s -> long host byte order: %s, network byte order:%s' %(data,socket.ntohl(data),socket.htonl(data))) # 16-bit short print ('original: %s -> long host byte order: %s, network byte order:%s' %(data,socket.ntohs(data),socket.htons(data))) convert_integer() | cs |
>>
original: 1234 -> long host byte order: 3523477504, network byte order:3523477504
original: 1234 -> long host byte order: 53764, network byte order:53764
참고 서적 : 파이썬을 활용한 네트워크 프로그래밍
'programming > Python' 카테고리의 다른 글
django framework overview (0) | 2019.01.28 |
---|---|
pyenv를 통한 python 개발환경 구성 (0) | 2018.12.12 |
Python 주요사항 및 특징 (0) | 2018.06.13 |