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

+ Recent posts