Networking/Network Automation19 CCNP ENAUTO - 2 [Udemy] Synchronous API vs Asynchronous API Synchronous = We can think this is as queue. once the API call coming in, it will wait till the first request is done. once the task is completed, it will move on to next Asynchoronous = can handle multiple call. How the controll the Asynchrounous error Understanding Python Why Learn Python?Interpreted Scripting LangugageLow barrier to entry compared to othe.. 2025. 4. 2. CCNP ENAUTO - 1 [Udemy] People are focus on the application perspective, rather than a network perspective. This is why network automation concepts comes up. Application 으로 Network 관리할수 있는 거 찾고, Ingrade 시키는거 찾다가 Automation이 나온거 Solid Network Programmability foundation is required to build the knowledge level. API == Machine to Mahcine interaction rather CLI communication in between machine to machine.-> always faster .. 2025. 4. 2. NETCONF Protocol with YANG Data modeling NETCONFT = XML 형식 사용한 Network Management ProtocolTCP/SSH 위에서 정의되는 응용 계층 프로토콜 NETCONFT의 구조 즉 Device Programmability 에 꼭필요한 Protocol + Data model 이라는 것 NETCONF/RESTCONF/gNMI == programmable interfaces즉 이 프로토콜 통해서 cli처럼 인터페이스에 접속해서 config 하는 방식을 일컫는듯SNMP, WebUI 랑 비슷한 기능, Data 전달하는 매개체, 인터페이스라고 보면 편할듯 YANG은 이에 사용되는 data modeling langauge 인거고-> CLI에서는 사용되는게 MD-CLI라고 따로 있는듯(확실하진 않음, MD-CLI가 Yang da.. 2025. 4. 2. Network Automation r1 = {'host' : '192.168.122.13' , 'username' : 'cisco' , 'password' : 'cisco'} r2 = {'host' : '192.168.122.14' , 'username' : 'cisco' , 'password' : 'cisco'} r3 = {'host' : '192.168.122.15' , 'username' : 'cisco' , 'password' : 'cisco'} #dictionary type var routers = [r1,r2,r3] #save the data as List type for Wayne in routers: print(Wayne['host']) #Wayne = Var, print(Wayne['host']) 명령어를 통해 list에.. 2021. 7. 21. 네트워크 엔지니어를 위한 프로그래밍 기초 - 12 Module에 내가 쓰는 함수가 적을수록 불러올 benefit이 없음 (resource를 낭비) 이러한 것을 대비해서, 그 모듈 안의 특정한 함수 자체를 불러올수있음 어떻게? 물론 Class만 따로 불러올수도 있음 Python Data Stroage 파이썬 프로그램이 돌아갈때 데이터를 저장하는 여러가지 기술적인 방법 txt 파일은 우리가 한줄한줄 read()함수나 readline(), write()함수를 통해서 읽어야 하지만 JOSN, CSV and XML은 이미 다 정의가 되어 있으므로 그냥 import만 하면됨 파일에 저장되어 있는 여러개으 ㅣ값들이 컴마에 의해서 구분되는 파일들을 csv라고 함 단순하게 이해하자면, 이런 txt파일을 list파일로 만들어서 읽은다음 하는 과정을 생략하고, 그저 컴마를.. 2021. 5. 24. 네트워크 엔지니어를 위한 프로그래밍 기초 - 11 IF Statement IF문은 어느 프로그래밍 언어에서도 모두 사용한다 네트워크 자동화 프로그래밍에서는 if문 다음 비교 연산자가 나옴 어떤 값이 들어있는가? 라는 것도 비교 연산자로 사용 가능 실습 버전 정보가 5.3.1이 아닌 정보만 출력되도록 하기 대채로 Regurlar expression은 ip나 다른 mac address를 찾는대 사용한다. if문 다음에는 항상 Colon을 적어줘야 동작함 current_version = 'Version 5.3.1' # 기준이되는 버전 설정 print('Devices with bad software version') print('---------------------------------') file = open('sec08_devices' , 'r') for.. 2021. 5. 24. 네트워크 엔지니어를 위한 프로그래밍 기초 - 10 비교 연산자 네트웤 자동화 에서는 값에대해 비교하는 상황이 정말 많음 2개의 값을 가지고 어떤지 확인하는 것 lexicographic : 사전 편찬상의 , 문자열인 경우 ASKII 값을 비교, 하나하나 각자 같냐 다르냐 비교 숫자로가져와서 비교할수도있고 문자로 가져와서 비교할수도 있다. Membership : 'in'은 대표적으로 set용도로 사용 set은 index값이 없음. 값이 중복으로 존재할수 없음 리스트나 튜플은 안의 값의 하나하나 전부다 비교함 Decompose : '.' 이나 ',' 기준으로 분리 시켜서 비교 하는거 Normalize : 여러가지 형태로 존재하는 어떠한 값을 통일화 시킬때 사용. ex) Mac address 같은 경우 운영체제나 장비마다 aa:bb 이렇게 표시될수도있고 aa... 2021. 5. 24. 네트워크 엔지니어를 위한 프로그래밍 기초 - 9 Sets - Unordered : 순서가 없다. (Key값이나 Index값이 없다)(특정한 위치 값이 없으므로 어떤 값이 이 set안에 들어 있는가 안들어있는가 확인하는 이런 용도로 사용) - Unique items : Set의 요소item 은 중복으로 존재할 수 없다. (Set에는 수정이 불가능한 값들이 들어와야 한다) - Hashable : Set의 요소item은 hashable, 즉 immutable 값으로 number, string, tuples이 가능하다.(딕셔너리 X) - { } 중괄호 사용: Dictionary와 같이 { } 중괄호 사용 - Mutable : Set의 요소item은 수정이 가능하다. - 우리말로는 집합 중복이 존재 하는 값을 set을 만들어보자 이렇게 중복 되는 것들은 제거되.. 2021. 5. 24. 네트워크 엔지니어를 위한 프로그래밍 기초 - 8 list는 변경 작업이 가능하다. Tuple 리스트와 동일한 성질을 가지고 있지만, "수정"이 불가하다 Tuples - Sequence : Tuple의 아이템은 순서가 있다. 즉 ordered collection 이다. - Heterogeneity : Tuple 의 아이템은 서로 다른 자료형이 와도 상관없다. - Immutable : Tuple은 그 내용을 수정할 수 없다. - Tuple의 항목item : Tuple의 각 항목item은 list, dictionary, tuple등이 올 수 있다. 튜플은 자료구조가 서로 달라도 상관이 없다. 변경이 되선 안되는 데이터들은 튜플로 저장해놓으면 됨 Dictionary를 Tuple로 튜플안에 딕셔너리가 데이터로 들어가 있음. 메모리 낭비를 줄이기위해, 자료형 안.. 2021. 5. 20. 네트워크 엔지니어를 위한 프로그래밍 기초 - 7 ##Palo Alto Config for connecting to Active Directory CN=GeorgiaSeatIT(10200007),OU=IT[Georgia Seat],OU=HR/IT[Georgia Seat], OU=Georgia Seat,OU=Overseas Corporations, OU=Users,OU=Hyundai-Transys,DC=TRANSYS,DC=Global" Microsoft Windows [Version 10.0.14393] (c) 2016 Microsoft Corporation. All rights reserved. C:\Users\admin>dsquery dc=transys,dc=global -name 10200007 dsquery failed:The parameter i.. 2021. 5. 20. 네트워크 엔지니어를 위한 프로그래밍 기초 - 6 Python Data Structure Data Structure : 데이터를 저장할때 어떤 식으로 저장할지 정해놓는것. ex) 어떤 물건을 창고에 저장할때 자주쓰는거는 앞에두고 무거운거는 뒤로 두고 이런식으로 효과적으로 구성하는 것 변수를 정의할때 기본적으로 이 4가지 자료구조중 하나를 정하게 됨 "메모리"에 데이터를 저장할때 4가지의 구조가 있음 왜? 데이터를 활용하는 방법들이 전부 다르기 때문 리스트 : 기본적으로 목록이다. 수정이 가능하다. 대괄호 [] 로 구성. 이 괄호 안에 어떠한 값들을 집어 넣음. 리스트에서 중요한 것은, 데이터에 "순서"가 있다는것. Index 0 , Index 1 .... 이런식으로 순서대로 저장이 됨. 우리는 리스트의 특정한 자료를 정할때 index값으로 사용 Dict.. 2021. 5. 19. 네트워크 엔지니어를 위한 프로그래밍 기초 - 5 pexpect를 이용한 텔넷 접속 pexpect - 일반적인 방법 - 연결 작업 하나하나에 대한 instruction(설명)을 제공해야 한다. paramiko - Python에서 SSH 통신을 위한 라이브러리 - 자동 로그인 프로세스 - 명령어의 결과는 개발자가 코드를 작성하는 메뉴얼 방식을 분석 #Code import pexpect ip_address = '192.168.122.11' username = 'cisco' password = 'cisco' print(ip_address + '로 텔넷 접속을 시도하고 있습니다.') session = pexpect.spawn('telnet ' + ip_address, timeout=20) result = session.expect(['Username: ', p.. 2021. 5. 19. 네트워크 엔지니어를 위한 프로그래밍 기초 - 4 파이썬 코드는 다른 코드와다르게 {}를 안쓰고 들여쓰기, Tab으로 인식을 함. 위의 코드의 예를 보길 identation = 들여쓰기 If문에서는 반드시 :이 들어가야 함, 들여쓰기 가능 주석 달때는 # 하고 치면 됨 파일을 읽어올때 크게 2가지 방식 1. 파일 자체를 읽어오는 방식 2. 사용자의 input을 받는 방식 기본적으로 open명령어를 사용해서 파일을 읽어온다. 그리고 그 파일을 메모리 어딘가에 저장하고, 파일(객체)이라는 변수안에 저장. Readline()같은 명령어 경우 라인을 한 줄 씩 읽어온다. Read(n) 글자 객수로 읽어옴 왼쪽 처럼 코딩해서 실행하면 오른쪽 처럼 나옴 근데 프른트를 하면서 한번더 줄 바꿈이되서 보기 아주 불편해짐 그땐 readline()에다가.strip()명령어.. 2021. 5. 19. 네트워크 엔지니어를 위한 프로그래밍 기초 - 3 파이썬 언어의 개요와 코드 파이썬이 쉽다고 하지만, 프로그래밍언어이기 때문에 초반 진입 장벽이 낮진 않음 prepix library = 보내고 받고 하는데 쓰이는 라이브러리. 이 외에도 다른 라이브들이 많다 Interpreter = 한 줄 치고 실행하는 방식 Python Application = 스크립트 짜서 한번에 프로그램처럼 돌리는 방식 이러하게 한줄 입력하고 한줄실행하고 하는 방식을 Interpreter 방식 이라고 한다. 이렇게 짠 다음에 이렇게 실행 하면 Application 방식으로 실행 시키는 것 Number & String (Python에서 다루는 Data 자료형) data의 자료형이란? 메모리에 자료를 저장할때 어떤 종류로 저장 하느냐에 따라 구분하는 방식 % : 나머지만 취하는거 ** .. 2021. 5. 15. 네트워크 엔지니어를 위한 프로그래밍 기초 - 2 이번에 사용할 코드의 영역(보통 이렇게 코딩을 하는 듯) 이번에 실습할 코드들의 토폴로지 show version을 3개의 라우터에 넣고, 결과값 가지고 오기 궁극적으로는 Vendor사에서 제공하는 API들을 이용해서, 현재 Infra에 적용시켜 그 제품을 좀 더 효율적으로 이용할수 있도록 Tranform 시키는 과정 Function : 반복적으로 이루어지는 작업 Devices file : IP information 가져오기 Connect to device : Telnet 접속 Get device version : version 정보 가져오기 이 3가지 기능경우, 반복적으로 이루어지기 때문에 함수(Function)을 정의함 Main 함수 Main line에서 이 함수들을 active 시키는 과정 Telne.. 2021. 5. 15. 네트워크 엔지니어를 위한 프로그래밍 기초 - 1 네트워크, 특히 인프라 분야에서는 최근 기하급수적으로 바뀌고있다. 자연스럽게 프로그래밍 기반으로 바뀌고 있음. 일반 프로그래밍(데이터를 다룸)과 다르게 네트워크 기반의 프로그래밍은, 네트워크 장비를 다루는데 프로그래밍을 사용한다. 네트워크 장비의 setting및 configuration을 다룬다. 항상 효율적으로 돌아갈수 있도록 구현을 하고 죽지않도록 프로그래밍을 하게 된다. 그렇다면 이러한 네트워크 인프라에서 구현되는 어플리케이션은 무엇이 있는가? Cisco의 IOS에서 사용하는 CLI는, 기계가 분석해서 무언갈 Implement 하게 설계된 것이 아닌, 사람이 직접 명령어를 넣고, 직접 제어 및 분석(Parsing)하는 방식으로 구성 되어있다. Netcuff라든지 관리용 프로토콜을 통해 장비를 제어하.. 2021. 5. 15. Network Programmability - 2 Import telnetlib Host = ‘’ User = ‘’ Password = ‘’ mytelnet = telnetlib.Telnet(host = host) mytelnet.read_until(b’Username:’) mytelnet.write(user.encode() + b’\n’) mytelnet.read_unti9l(b’Password:’) mytelnet.write(b’Password:’) mytelnet.write(b’sh ip int br\n’) mytelnet.write(b’exit\n’) output = mytelnet.read_all() output = output.decode() print(output) 프로그램이란 무엇인가? 컴퓨터가 기능을 수행을 한다, 이 기능을 수행을 하기.. 2021. 5. 14. Network Programmability - 1 Network Programmability Python = Infra/특히 Network 장비를 다루기위함 파이썬을 학습을 해서 만드는것은 어플리케이션, 우리가 만드는 것은, 뭔가 네트웤에 존재하는 IT인프라를 프로그램으로 제어하기 위함. Proactive application : 네트웤에 존재하는 장비들의 설정을 바꾸기 위함, 예를 들면 백업 코드 짜서 프로그램 돌리는거 Reactive application : 장비 자체나 어떤 곳에서 발생하는 로그? 같은 것을 이용해서 그에 맞게 장비 설정을 바꾸는 것. 장비를 설정할때 어떤식으로 할수있는가? 1. CLI : 모든 네트웤 장비는 CLI를 지원함. CLI같은 경우는 자동화 툴이 아니기 때문에, 자동화가 어려움, Proactive application을 .. 2021. 5. 14. First Code - 1 import telnetlib host = '192.168.122.106' user = 'stz' password = 'cisco' mytelnet = telnetlib.Telnet(host = host) mytelnet.read_until(b'Username: '') mytelnet.write(user.encode() + b'\n') mytelnet.read_until(b'Password: '') mytelnet.write(password.encode() + b'\n') mytelnet.write(b'show ip int br\n') mytelnet.write(b'exit\n') output = mytelnet.read_all() output = output.decode() print(output) 2021. 5. 14. 이전 1 다음