CLIEN

본문 바로가기 메뉴 바로가기 보기설정 테마설정
톺아보기 공감글
커뮤니티 커뮤니티전체 C 모두의광장 F 모두의공원 I 사진게시판 Q 아무거나질문 D 정보와자료 N 새로운소식 T 유용한사이트 P 자료실 E 강좌/사용기 L 팁과강좌 U 사용기 · 체험단사용기 W 사고팔고 J 알뜰구매 S 회원중고장터 B 직접홍보 · 보험상담실 H 클리앙홈
소모임 소모임전체 ·굴러간당 ·아이포니앙 ·주식한당 ·MaClien ·일본산당 ·방탄소년당 ·개발한당 ·자전거당 ·안드로메당 ·나스당 ·이륜차당 ·소셜게임한당 ·소시당 ·물고기당 ·골프당 ·클다방 ·덕질한당 ·바다건너당 ·요리한당 ·스팀한당 ·AI그림당 ·가상화폐당 ·노젓는당 ·패스오브엑자일당 ·AI당 ·WOW당 ·창업한당 ·키보드당 ·테스트당 ·육아당 ·여행을떠난당 ·콘솔한당 ·갖고다닌당 ·PC튜닝한당 ·3D메이킹 ·X세대당 ·ADHD당 ·날아간당 ·사과시계당 ·배드민턴당 ·야구당 ·농구당 ·블랙베리당 ·곰돌이당 ·비어있당 ·FM당구당 ·블록체인당 ·보드게임당 ·활자중독당 ·볼링친당 ·캠핑간당 ·냐옹이당 ·문명하셨당 ·클래시앙 ·쿠키런당 ·대구당 ·DANGER당 ·뚝딱뚝당 ·디아블로당 ·개판이당 ·동숲한당 ·날아올랑 ·전기자전거당 ·e북본당 ·이브한당 ·패셔니앙 ·도시어부당 ·FM한당 ·맛있겠당 ·포뮬러당 ·젬워한당 ·걸그룹당 ·안경쓴당 ·차턴당 ·총쏜당 ·땀흘린당 ·하스스톤한당 ·히어로즈한당 ·인스타한당 ·IoT당 ·KARA당 ·꼬들한당 ·어학당 ·가죽당 ·레고당 ·리눅서당 ·LOLien ·Mabinogien ·임시소모임 ·미드당 ·밀리터리당 ·땅판당 ·헌팅한당 ·오른당 ·영화본당 ·MTG한당 ·소리당 ·노키앙 ·적는당 ·방송한당 ·찰칵찍당 ·그림그린당 ·소풍간당 ·심는당 ·라즈베리파이당 ·품앱이당 ·리듬탄당 ·달린당 ·Sea마당 ·SimSim하당 ·심야식당 ·윈태블릿당 ·미끄러진당 ·축구당 ·나혼자산당 ·스타한당 ·파도탄당 ·퐁당퐁당 ·테니스친당 ·빨콩이당 ·공대시계당 ·터치패드당 ·트윗당 ·VR당 ·시계찬당 ·WebOs당 ·위스키당 ·와인마신당 ·윈폰이당
임시소모임
고객지원
  • 게시물 삭제 요청
  • 불법촬영물등 신고
  • 쪽지 신고
  • 닉네임 신고
  • 제보 및 기타 제안
© CLIEN.NET
공지[점검] 잠시후 서비스 점검을 위해 약 30분간 접속이 차단됩니다. (금일 18:15 ~ 18:45)

팁과강좌

PC/모바일 파이썬으로 네트워크 서브넷 계산기 만들기 5

1
2020-02-16 00:00:14 122.♡.157.9
쿠키맨

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

잘못된 형식의 이미지 링크입니다.


=====================================================================

다음은 메일관련 자동화 스크립트를 준비해보겠습니다.


출처 : 내가 사용하던거..
쿠키맨님의 게시글 댓글
SIGNATURE
크롬확장앱 쿠키스트림
https://chrome.google.com/webstore/detail/cookystream-manager/ffgaiddifghkcdkhjmgmmlgmdplnemfo?hl=ko&authuser=0

크롬확장앱 쿠키탭
https://chrome.google.com/webstore/detail/%EC%BF%A0%ED%82%A4%ED%83%AD%EA%B4%80%EB%A6%AC%EC%9E%90/ghgecjpngbcgilomnmakjpflpommdbmm?hl=ko&authuser=0

블로그
https://scv-life.tistory.com/
서명 더 보기 서명 가리기
  • 주소복사
  • Facebook
  • X(Twitter)
댓글 • [5]
커지자
IP 175.♡.148.131
02-16 2020-02-16 00:14:15
·
https://docs.python.org/ko/3/howto/ipaddress.html 이거 쓰셔도 됩니다.
뚱베이뫔스틴
IP 112.♡.117.53
02-16 2020-02-16 10:41:51
·
훌륭하십니다. 이렇게 또 차근차근(?) 배워가는군요
삘이
IP 117.♡.3.7
02-16 2020-02-16 11:33:25
·
요즘 파이썬 시작했는데 잘읽었습니다
하앍하앍-
IP 211.♡.80.17
02-16 2020-02-16 12:25:16
·
뭔가 누군가에게 유용한 정보인것 같은데요, 제가 배경지식이 짧아 motivation이 이해가 잘 되지 않습니다.
이걸 함으로서 얻을 수 있는 이득(?) 은 무엇이 있는지, 어디에 어떻게 유용하게 써먹을 수 있는지 조금 더 설명해 주실수 있을까요?
쿠키맨
IP 122.♡.157.9
02-16 2020-02-16 13:14:39
·
@하앍하앍-님

아.. 그러고보니 글 배경 및 목적이 조금 부족했네요.

조금 추가하자면..

** 툴 자체는 네트워크관리자를 위한 소소한 툴 스크립트 정도 이기에 대중적이지는 않습니다만.. 해당 스크립트를 통해 다음과 같은 것들을 익히실수 있습니다
(1) 네트워크 주소 기본지식
(2) 간단한 패턴검색과 문자 나누고 합치기 등
(3) 옥텟과 바이너리 계산의미와 방법. (가장 중요 부분)

아무래도 간단히 만들어 사용할 수 있는 툴을 이용해 파이썬의 활용성에 집중하다보니 설명이 좀 부실했습니다.
새로운 댓글이 없습니다.
이미지 최대 업로드 용량 15 MB / 업로드 가능 확장자 jpg,gif,png,jpeg,webp
지나치게 큰 이미지의 크기는 조정될 수 있습니다.
목록으로
글쓰기
글쓰기
목록으로 댓글보기 이전글 다음글
아이디  ·  비밀번호 찾기 회원가입
이용규칙 운영알림판 운영소통 재검토요청 도움말 버그신고
개인정보처리방침 이용약관 책임의 한계와 법적고지 청소년 보호정책
©   •  CLIEN.NET
보안 강화를 위한 이메일 인증
안전한 서비스 이용을 위해 이메일 인증을 완료해 주세요. 현재 회원님은 이메일 인증이 완료되지 않은 상태입니다.
최근 급증하는 해킹 및 도용 시도로부터 계정을 보호하기 위해 인증 절차가 강화되었습니다.

  • 이메일 미인증 시 글쓰기, 댓글 작성 등 게시판 활동이 제한됩니다.
  • 이후 새로운 기기에서 로그인할 때마다 반드시 이메일 인증을 거쳐야 합니다.
  • 2단계 인증 사용 회원도 최초 1회는 반드시 인증하여야 합니다.
  • 개인정보에서도 이메일 인증을 할 수 있습니다.
지금 이메일 인증하기
등록된 이메일 주소를 확인하고 인증번호를 입력하여
인증을 완료해 주세요.