1. 글배경 및 목적
- 이전 글과 마찬가지로..
- 간단한 툴을 만들며, 코딩의 자신감을 드리고
- 파이썬으로 토렌트 클라이언트를 만들어 봄으로써, 파이썬에 간단한 개념을 설명하고자 합니다.
- 해당 스크립트는 초보 네트워크 관리자분들을 위한 초간단 스크립트 입니다. (보통은 외우시더라구요 ㄷㄷ)
2. 사전준비
- 파이썬 3.x 설치가 필요 합니다.
- IP주소와 네트워크주소의 구조에 대한 사전지식이 필요 합니다. (다음 링크를 참조)
http://korean-daeddo.blogspot.com/2015/12/ip.html
잘못된 형식의 이미지 링크입니다.
(윈도우 PC의 네트워크 설정화면)
잘못된 형식의 이미지 링크입니다.
(32비트 길이로 구성된 논리적인 주소체계인 IP주소)
잘못된 형식의 이미지 링크입니다.
(클래스에 따른 IP주소와 네트워크 주소 체계)
3. 본론 - 파이썬으로 네트워크 서브넷 계산기 만들기
코드이 주요 부분은 다음과 같습니다.
입력받은 IP주소를 검증합니다.(예 : 192.168.1.2)
# IP주소를 입력받아 저장.
input_ip = input("\nIP주소를 입력해주세요: ")
# 입력받은 IP주소의 유효성을 체크합니다.
octet_ip = input_ip.split(".")
print(octet_ip)
int_octet_ip = [int(i) for i in octet_ip]
if (len(int_octet_ip) == 4) and \
(int_octet_ip[0] != 127) and \
(int_octet_ip[0] != 169) and \
(0 <= int_octet_ip[1] <= 255) and \
(0 <= int_octet_ip[2] <=255) and \
(0 <= int_octet_ip[3] <= 255):
break
else:
print("잘못된 IP주소 입니다.\n")
continue
샐행결과 부분
잘못된 형식의 이미지 링크입니다.
실행결과 오류부분
잘못된 형식의 이미지 링크입니다.
서브넷 마스크 주소 또는 CIDR을 요청하며, 입력 받은 서브넷 마스크 주소는 패턴과 서브넷 주소체계에 따라 유효성을 검증합니다.
# 서브넷 마스크 주소 입력요청
input_subnet = input("\n서브넷 마스크 주소를 입력하세요: ")
# 서브넷 마스크와 넷마스크비트를 모두 받을수있도록 함.
p = re.compile('^/')
m = p.match(input_subnet)
if m:
input_subnet = int(input_subnet.split('/')[1])
if 3 < input_subnet < 33:
cidr = int(input_subnet)
mask = (0xffffffff >> (32 - cidr)) << (32 - cidr)
input_subnet = (str((0xff000000 & mask) >> 24) + '.' +
str((0x00ff0000 & mask) >> 16) + '.' +
str((0x0000ff00 & mask) >> 8) + '.' +
str((0x000000ff & mask)))
else:
print("잘못된 서브넷 마스크 주소 입니다.\n")
continue
octet_subnet = [int(j) for j in input_subnet.split(".")]
# print octet_subnet
if (len(octet_subnet) == 4) and \
(octet_subnet[0] == 255) and \
(octet_subnet[1] in masks) and \
(octet_subnet[2] in masks) and \
(octet_subnet[3] in masks) and \
(octet_subnet[0] >= octet_subnet[1] >= octet_subnet[2] >= octet_subnet[3]):
break
else:
print("잘못된 서브넷 마스크 주소 입니다.\n")
실행결과 오류부분
잘못된 형식의 이미지 링크입니다.
IP와 서브넷을 모두 바이너리로 변경합니다.
변경과정은 아래 IP주소처럼..
192.168.2.1 => ['11000000', '10101000', '10', '1'] =>
=> ['11000000', '10101000', '00000010', '00000001'] => 11000000101010000000001000000001
# 각각의 IP주소 옥텟을 바이너리로 변경.
# 예: 192.168.2.1 => ['11000000', '10101000', '10', '1']
ip_in_bin_octets = [bin(i).split("b")[1] for i in int_octet_ip]
# make each binary octet of 8 bit length by padding zeros
# 각 옥텟의 8비트 길이 만큼 각각 0으로 채움.
# 예: 192.168.2.1 => ['11000000', '10101000', '10', '1'] => ['11000000', '10101000', '00000010', '00000001']
for i in range(0,len(ip_in_bin_octets)):
if len(ip_in_bin_octets[i]) < 8:
padded_bin = ip_in_bin_octets[i].zfill(8)
ip_in_binary.append(padded_bin)
else:
ip_in_binary.append(ip_in_bin_octets[i])
# 각가의 옥텟을 모두 결합시킵니다.
ip_bin_mask = "".join(ip_in_binary)
4. 실행 및 사용법
(1) 파이썬으로 실행시키는 방법
전체소스는 다음링크를 통해 다운받으실수 있습니다.
https://github.com/cookyman74/utility/blob/master/subnetcalculator.py
잘못된 형식의 이미지 링크입니다.
(2) 컴파일된 실행파일(exe)으로 실행시키는 방법
exe 파일은 다음 링크를 통해 다운 받으실수 있습니다.
https://github.com/cookyman74/utility/blob/master/dist/get_directory_size.exe
잘못된 형식의 이미지 링크입니다.
=====================================================================
다음은 메일관련 자동화 스크립트를 준비해보겠습니다.
이걸 함으로서 얻을 수 있는 이득(?) 은 무엇이 있는지, 어디에 어떻게 유용하게 써먹을 수 있는지 조금 더 설명해 주실수 있을까요?
아.. 그러고보니 글 배경 및 목적이 조금 부족했네요.
조금 추가하자면..
** 툴 자체는 네트워크관리자를 위한 소소한 툴 스크립트 정도 이기에 대중적이지는 않습니다만.. 해당 스크립트를 통해 다음과 같은 것들을 익히실수 있습니다
(1) 네트워크 주소 기본지식
(2) 간단한 패턴검색과 문자 나누고 합치기 등
(3) 옥텟과 바이너리 계산의미와 방법. (가장 중요 부분)
아무래도 간단히 만들어 사용할 수 있는 툴을 이용해 파이썬의 활용성에 집중하다보니 설명이 좀 부실했습니다.