itkorea 인천 아카데미 클라우드 정보보안 수업 자료 및 정리
2024-11-25~2025-05-13
정식 수업~
매주 월화수목금 9시30분-6시30분까지 과정
캡쳐 중간에 날라감
글로 설명
cmd창에서 dnf install paramiko
dnf install netmiko
paramiko 는 파이썬 ssh 사용가능 하게 하는 네트워크 모듈
net miko 는 파이썬 telnet 사용가능 하게 하는 네트워크 모듈
파이썬은 윈도우랑 리눅스랑 다 같이 공유 가능
코드를 따로 링크안해도 상관없다가 큰 장점!
exit()하면 나가짐
바탕화면에 주피터 노트북 bat 파일->마우스 우클릭->바로가기 하기
거기서 속성 고급에 관리자모드로 실행 열고
안되면
e:py_date에서 check 폴더 지우기(백업폴더임) 그래도 안열리면
그냥 ide로 열기 ㄱㄱ
import paramiko
ssh = paramiko 하고 팁키누르면 paramiko의 모듈들이 나옴
서버는 들어오게하고
클라이언트는 들어가게하는거임
서버랑 클라이언트의 차이
사전에서는 서버를 정보를 제공하는 측, ssh로 따지면 얘는 들어오게하는거
클라이언트는 정보를 반대로 요청하는 측, ssh로 따지면 얘는 들어가는것
파라미코라는 프로그램에 .(점)이라고 붙어있는거는 다 그것들의 기능
모듈이라는게 프로그램
다음 클래스라는게 있어
함수나 모듈을 다 모아둔게 클래스, 집합임
insert는 개체
프로그램 다음 . 나오는건 모듈이라고 생각
() 함수 없으면 변수
파이썬은 아주 단순해요 변수랑 함수만 구분하면되는데
변수 함수 클래스 이 세개만 구분하면 돼요
클래스는ㅣ 캐멀 케이스라고 하고
식별자는 1, 캐멀케이스(낙타) 2,스네이크 케이스가있는데 (뱀) --> 소문자들이 이어진게 뱀같더라, 그래서 스네이크 케이스
만약 캐멀케이스에서 대문자로 시작하면 클래스고(클래스는 완성된 프로그램을 뜻함
다 들어가있는거임), 파이썬에서는 클래스 밖에 없음
스네이크 케이스는 소문자로 시작하는데
전세계 프로그래머들이 약속을 했는데, 단어와 단어가 합쳐지면 ,첫번째는
대문자로 쓰자
그래야 이거 합성어구나라는걸 알게되거든
whY? 대문자를 잘못쓰면 클래스가되니까, 오해 방지용
합쳐지는 단어의 첫글자는 대문자로 표기해라 ItemList LoginStaus CharaterHP
만약 이걸 소문자로 쓰고싶다?-->단어와 단어사이에 언더바를 집어넣어라 item_list login_status character_hp
print()--> 함수인 이유는 두개, 괄호가 있고, 소문자거든 그래서 이걸 '프린트'함수라고 말하는거임
list() 리스트 함수
soup.select()함수 .(점)이 붙어서 특별하지만 함수임
math.pi는 변수임
BeautifulSoup() 클래스, 변수 (대문자니까)
표현식: 값을 만들어내는 간단한 코드고
표현식들이 모여서 문장이 되고
그 문장들이 모여서 프로그램이 된다
하드에 저장되어있다가, 더블클릭하면 메모리로 들어감
모든 프로그램은 메모리에서 실행되거든
만약 메모리에 실행안되면 죽은거임
얘가 그냥 메모리가 데이터를 살아내게 하냐? ㄴㄴ
cpu가 ok 사인 떨어져야 메모리 데이터가 살아남
연산은 cpu에서 함 alu에서 작동
캐시 메모리는 하드 디스크가 시속 50km에요 캐시는 70km
cpu 100km
컴퓨터 중에 cpu 속도를 따라갈 수 있는 hw는 없어요, 지구상에는
cpu안에 캐시메모리 넣어놓았는데 l1 l2 l3가 있고,
캐시 메모리는 왜 넣어놓았냐? 메모리가 속도가 느리니까, 메모리가
cpu에게 메모리 넘겨주기보다, 미리 캐시가 저장된 메모리를 cpu에게
넘겨주는거임, 비서라고 생각하기
프로그램은 죽은거고, 그게 메모리로 올라가면, 프로세스가 됨, 살아난거임
프로세스는 두개로 나눔, 백그라운, 포그라운드
그래서 백그라운드는 노크를 해서, 앞으로 나오게 하는거고
그걸 우분투에서 xinetd라고 super daemon이고
그래서 이 처리 과정이 전부 ok 사인이 들어가게할려면,
cpu 오케이가 필요한거임
파이썬은 프로그램 모듈이라고 부름
프로그램이라고 부를때가 있고 모듈이라고 부를때가 있는데
단독으로 사용할때 1, 프로그램 2, 패키지
윈도우에서는 1, 프로그램, 2패키지
리눅스에선 패키지
파라미코는 패키지라고함 단독으로 쓰일때
paramiko.SSHClient()
파이썬은 함수가 호출 당하면 함수라고 안부르고 모듈이라고 부름
자바는 함수 개념이 없음, 다 모듈이라고 하고 패키지라고 함
파이썬은 두가지로 부름 함수냐 모듈이냐
함수일땐, 내가 단독으로 쓰는거(print())라는거, 근데 parmiko.SSHClient() 같이 호출당한 SSH이놈은
모듈이라고 부르는거임
paramiko.누르고 탭키 쪽나오는건 함수라고 부르고, 그걸 부르면 다 괄호를 붙여줘여하는거임
ssh. 하고 또 점 찍고 탭키 누르면 짜르르 뜨는데
ssh의 기능들인거임
ssh.connect(연결) ssh.close(연결 종료한다는 얘기)
ssh.set_missiong_host_key_policy() <---괄호 붙여주기 (함수니까)
ssh.set_missiong_host_key_policy(paramiko.AutoAddPolicy())
포트 넘버 (1~65,535번까지 있어요) 네트워크 통신은 저거뿐이에요 우리는 저걸로 인터넷하는거예요
저거 다 몰라도 됨, 한 30개 정도는 설천에 외워야하고 아래 기본은 다 외워야해요
20,21 22 23 25 80(443) 110 119
TCP 프로토콜로 동작하는 애들--> ftp ssh telent SMTP HTTP(HTTPs) POP3 NNTP
파일서버 원격서버 메일서버 웹서버 메일서버 뉴스서버
53 67,68 69 169
UDP 프로토콜로 동작하는 얘들---> DNS DHCP TFTP SNMP
도메인네임 네트워크 관리 FTP간소화 모니터링
서버
#파이썬에서 문자열은 "문자" 또는 '문자' 기호를 사용합니다
문자열을 표기하고싶은면 큰따옴표 작은따옴표 쓰기
파이썬은 큰따옴표 작은 따옴표는 정해져있지않지만 우린 자바 정책을 따를거예요
자바는 큰따옴표 작은따옴표가 정해져있어요
두글자이상은 큰따옴표
한글자는 작은 따옴표
포트번호는 숫자라서 문자열 표기를 안하는거임
암호는 문자열이에요 숫자가 아니라
그래서""하는거임
stdin, stdout, stderr = ssh.exec_command()
ssh.exec_command()는 내가 ()에 내 입력을 넣는다는거임
그래서 그게 stdin이 되고 stdout되고 stderr가 되는거임
결과를 보고싶으면 print()
조별 실습]
조원꺼 한번에 땡기는 코드 만들기
그거 조원이 4명이면 그걸 한번에 땡기는 코드 만들기
출력 원하는 명령어 ls -l /home
파이썬의 기본 규칙은 하나의 변수에는 하나의 값만 대입할 수 있음
근데 특수 값을 이용하여. 하나의 변수에 여러개의 값을 대입할 수 있음
그 변수가 뭐냐면
[list] (tuple) {dictionary} 함수들임 집어넣으면 여러개 값 대입 가능~
===매직키 알려줄게요====
%%writerfile %%writefile C:/Users/admin/Desktop/server_log.py
.py를 pdf나 docx로 바꾸면 그 파일로 저장됨
그리고 마지막에
input("엔터키를 입력해서 종료해주세요")
파이썬에서는 경로를 포기할때 역슬래시로
C:\Users\admin\Desktop
c드라이브 밑에 users 밑에 admin 폴더 밑에 이렇게 읽는데
만약 저렇게 역슬래시 기호를 쓸꺼면 한번더 써줘야함
그래서 익스케이프가되는건데
두개씩 치기 힘드니까
C:/Users/admin/Desktop
로 바꿔서 쓰는거임
코드 작성기로 하는 사람은 그냥 파일 찍어서 바탕화면에 저장하면되고
주피터 노트북 있는 사람은 저거 경로 적기
실천에서는 그래서 cron 명령어가 걸려있는게 많음
스크립트가 겁나 많아서 그걸로 관리하는거임
파이썬에서 파일을 만드는 가장 쉬운방법은
>하면 끝나느거임 그냥
[숙제] 파이썬-점프 투 파이썬 기초책 보기!
위키북스는 서버에 책을 만들고, 책을 다 오픈하는 고마운 사이트~
기간은 올해 말까지 혼자 다 공부하고와요~ 끝내고 와야해요!
우리 기초로 시간낭비하지말자구요~!
리눅스에서 파이썬 실습
import paramiko
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect("192.168.10.33", 22, "root", "12345678")
stdin, stdout, stderr = ssh.exec_command("w")
result = stdout.readlines()
for i in result :
print(i)
ssh.close()
wget http://192.168.10.250/server_log.py
pip install paramiko
pip3 install paramiko
python server_log.py
192.168.10.42 user2 해서 192.168.10.42의 로그 파일을 선샌님 pc에서 server_log.py로 저장하고
우린 그걸 wget으로 긁어올거임 이후 paramiko 설치해서 ssh 실행되게 할꺼임. wget으로 가져온 server_log.py를 실행할꺼임
sys.argv는 입력받겠다는거임
순서는 1234로
0은 왜 안됨? 0은 소스코드 파일 그자체를 말함
cmd에 명령어를 입력해서 구동시키게하는게 원리임
[선생님 윈도우 단축 명령어 실행 프로그램 꿀~]
RIPv2 수동 SUMMARY
PC3
ip 10.1.2.3 10.1.2.254
PC4
ip 10.1.2.4 10.1.2.254
PC5
ip 192.168.3.5 192.168.3.254
PC6
ip 192.168.3.6 192.168.3.254
R1
conf t
int s2/0
ip add 192.168.12.1 255.255.255.0
no sh
int loopback 0
ip add 172.16.1.254 255.255.255.0
int loopback 1
ip add 172.16.1.254 255.255.255.0
int loopback 2
ip add 172.16.2.254 255.255.255.0
int loopback 3
ip add 172.16.3.254 255.255.255.0
int loopback 4
ip add 172.16.4.254 255.255.255.0
int loopback 5
ip add 172.16.5.254 255.255.255.0
int loopback 6
ip add 172.16.6.254 255.255.255.0
router rip
version 2
network 172.16.1.0
network 172.16.2.0
network 172.16.3.0
network 172.16.4.0
network 172.16.5.0
network 172.16.6.0
network 172.16.7.0
network 192.168.12.0
no auto-summary
end
copy r start
R2
conf t
int s2/0
ip add 192.168.12.2 255.255.255.0
no sh
int s2/1
ip add 192.168.23.1 255.255.255.0
no sh
int e0/0
ip add 10.1.2.254 255.255.255.0
no sh
router rip
version 2
network 192.168.12.0
network 192.168.23.0
network 10.1.2.0
no auto-summary
end
copy r start
R3
conf t
int s2/0
ip add 192.168.23.2 255.255.255.0
no sh
int e0/0
ip add 192.168.3.254 255.255.255.0
no sh
router rip
version 2
network 192.168.3.0
network 192.168.23.0
no auto-summary
end
copy r start
수동써머리
r1이 r2에게 네트워크 정보를 알려줄때, 요약안하고
하나씩하나씩 알려주는거
why? 트래픽과다로 다운되는거 방지
R1에서 7개 네트워크를 집어넣지않고(Loopback하지않고)
ip summry-address rip 172.16.0.0 255.255.248.0
한그룹당 8개라는거야
r*은 스태틱임
RIPv2 인증
PC1
ip 172.16.1.1/24 172.16.1.254
PC2
ip 172.16.1.2/24 172.16.1.254
PC3
ip 172.16.2.3/24 172.16.2.254
PC4
ip 172.16.2.4/24 172.16.2.254
PC5
ip 172.16.3.5/24 172.16.3.254
PC6
ip 172.16.3.6/24 172.16.3.254
R1
conf t
int s2/0
ip add 172.16.12.1 255.255.255.0
no sh
int e0/0
ip add 172.16.1.254 255.255.255.0
no sh
router rip
version 2
network 172.16.1.0
network 172.16.12.0
no auto-summary
end
copy r start
R2
conf t
int s2/0
ip add 172.16.12.2 255.255.255.0
no sh
int s2/1
ip add 172.16.23.2 255.255.255.0
no sh
int e0/0
ip add 172.16.2.254 255.255.255.0
no sh
router rip
version 2
network 172.16.2.0
network 172.16.12.0
network 172.16.23.0
no auto-summary
end
copy r start
R3
conf t
int s2/0
ip add 172.16.23.3 255.255.255.0
no sh
int e0/0
ip add 172.16.3.254 255.255.255.0
no sh
router rip
version 2
network 172.16.3.0
network 172.16.23.0
no auto-summary
end
copy r start
암호화 시작
r1 r2는 평문으로 비번은 banana 12번
r2 r3는 암호화 비번은 apple 23번
R1
conf t
key chain master
key 12
key-string banana
int s2/0
ip rip authentication key-chain master
ip rip authentication mode text
end
copy r start
R2
conf t
key chain master
key 12
key-string banana
int s2/0
ip rip authentication key-chain master
ip rip authentication mode text
end
copy r start
R2
conf t
key chain master
key 12
key-string banana
int s2/0
ip rip authentication key-chain master
ip rip authentication mode text
end
copy r start
R2
conf t
key chain master
key 23
key-string apple
int s2/1
ip rip authentication key-chain master
ip rip authentication mode md5
end
copy r start
R3
conf t
key chain master
key 23
key-string apple
int s2/0
ip rip authentication key-chain master
ip rip authentication mode md5
end
copy r start
224.0.0.9가 뭐야? 왜 와이샤크에서 핑은 따라가기가안돼?
224.0.0.9의 의미
**224.0.0.9**는 멀티캐스트 주소로, **RIPv2 (Routing Information Protocol version 2)**에서 사용됩니다. RIPv2는 라우터 간에 라우팅 정보를 교환하기 위해 멀티캐스트를 사용하는 라우팅 프로토콜입니다.
- 224.0.0.9는 멀티캐스트 주소로, RIPv2 메시지를 수신하도록 설계된 모든 라우터에게 패킷을 전송합니다.
- 이 주소는 "링크 로컬 멀티캐스트" 범위에 속하며, 라우터가 직접 연결된 네트워크 상의 다른 RIPv2 라우터와 통신할 때 사용됩니다.
왜 Wireshark에서 ICMP(Ping)는 따라가기가 안 되는가?
ICMP 패킷과 멀티캐스트 패킷은 근본적으로 다른 방식으로 동작합니다. 224.0.0.9에 ICMP(Ping) 패킷을 보내는 것은 예상대로 동작하지 않거나 "응답 없음"으로 보일 수 있습니다.
1. 224.0.0.9는 멀티캐스트 주소
- ICMP 프로토콜은 주로 유니캐스트(1:1) 통신에 사용됩니다.
- ICMP Echo Request(핑 요청)는 특정 호스트(유니캐스트 주소)를 대상으로 하며, 멀티캐스트 주소는 기본적으로 핑 응답을 하지 않습니다.
- 멀티캐스트 주소로 핑 요청을 보내면 대부분의 시스템이나 네트워크 장비가 응답하지 않습니다.
- 224.0.0.9는 멀티캐스트 주소로, 특정 응답을 보장하지 않는 RIP 프로토콜의 메시지 교환을 위해 사용됩니다.
2. 멀티캐스트 주소에 Ping 제한
- 멀티캐스트 주소는 모든 대상에게 메시지를 전달하지만, ICMP는 "특정 대상"에서 응답을 요구합니다.
- 다수의 장비가 같은 멀티캐스트 주소를 사용하므로, Ping Echo Reply를 반환할 대상이 명확하지 않습니다.
- 따라서 대부분의 네트워크 장비는 멀티캐스트 주소에 ICMP Ping에 대해 응답하지 않습니다.
3. Wireshark에서 ICMP와 RIP의 차이
- Wireshark에서 ICMP는 주로 네트워크 연결 상태를 테스트하기 위해 사용되며, **RIP 패킷(멀티캐스트)**은 라우팅 정보를 교환하기 위한 별도의 목적을 가지고 있습니다.
- ICMP 트래픽은 연결 추적과 관련이 있지만, RIP 멀티캐스트 트래픽은 주로 "브로드캐스트처럼 행동"하므로 응답이 제한적입니다.
Wireshark에서 224.0.0.9 트래픽 분석
- RIP 메시지 확인:
- Wireshark에서 RIP 패킷 필터를 적용:
ip.dst == 224.0.0.9
- 224.0.0.9를 대상으로 하는 RIP 패킷을 확인할 수 있습니다.
- Wireshark에서 RIP 패킷 필터를 적용:
- RIP 패킷의 내용:
- RIP 패킷은 일반적으로 다음 정보를 포함합니다:
- Command: Request(1) 또는 Response(2).
- Version: RIP 버전 (주로 2).
- Route Entries: 라우팅 테이블 정보.
- RIP 패킷은 일반적으로 다음 정보를 포함합니다:
- ICMP Ping 요청을 확인하려면:
- Wireshark에서 필터:
icmp
- 멀티캐스트 주소로 ICMP 요청이 전송되는 경우, 응답이 없을 가능성이 높습니다.
- Wireshark에서 필터:
멀티캐스트 관련 ICMP 응답을 테스트하는 방법
- 멀티캐스트 Ping 지원 확인:
- 멀티캐스트 Ping을 보내기 위해 ping 명령어에 멀티캐스트 주소 사용:
ping 224.0.0.9
- 대부분의 네트워크 장비는 멀티캐스트 주소에 대한 Ping 응답을 하지 않으므로, 응답이 없을 가능성이 높습니다.
- 멀티캐스트 Ping을 보내기 위해 ping 명령어에 멀티캐스트 주소 사용:
- 응답 확인 장비 사용:
- 멀티캐스트 Ping에 응답하도록 구성된 특정 장비를 사용하거나, 응답을 허용하도록 네트워크 환경을 변경.
멀티캐스트의 일반적인 동작
- 멀티캐스트 주소는 "수신자 등록(Subscription)"이 필요합니다. 즉, 224.0.0.9로 데이터 패킷을 전송하더라도 해당 멀티캐스트 그룹에 참여하지 않은 장비는 이를 처리하지 않습니다.
- RIP 프로토콜을 사용하는 라우터만 224.0.0.9 패킷을 수신하고 응답합니다.
요약
- **224.0.0.9**는 RIPv2의 멀티캐스트 주소로, 주로 라우팅 정보를 교환하는 데 사용됩니다.
- Wireshark에서 ICMP Ping은 멀티캐스트 주소에서 응답하지 않는 것이 정상입니다.
- RIP 트래픽을 분석하려면 Wireshark에서 ip.dst == 224.0.0.9 필터를 사용해 RIP 메시지를 캡처하고 분석하세요.
이해를 돕기 위해 Wireshark에서 멀티캐스트 패킷과 RIP 메시지를 구분하여 분석하면 더욱 명확해질 것입니다! 😊
왜냐면 인증 관련해서 ping 보내서 거기 text, md5해서 암호화된 비번, 평문 비번 보고싶은데 ping은 따라가기가 안되고 이후 224.0.0.9가는 멀티캐스트 에서 비번이 보여서그래
224.0.0.9로 멀티캐스트 패킷에서 인증 관련 데이터를 확인하려는 시도는 RIPv2(Routing Information Protocol version 2)가 인증 데이터를 멀티캐스트로 전송하는 동작 때문일 가능성이 큽니다. 아래에서 이를 분석하고 해결 방향을 제시하겠습니다.
문제 맥락
- 멀티캐스트와 RIPv2 인증:
- RIPv2는 멀티캐스트 주소(224.0.0.9)를 통해 라우팅 정보를 교환하며, 이 과정에서 인증 데이터를 포함할 수 있습니다.
- RIPv2의 패킷 인증은 평문 비밀번호 또는 MD5 해시로 수행됩니다.
- Wireshark에서 RIPv2 인증 데이터를 확인할 수 있으며, 인증 모드에 따라 평문 비밀번호나 MD5 해시가 패킷에 포함됩니다.
- Ping은 왜 실패하나?:
- Ping(ICMP Echo Request)은 멀티캐스트 주소와 호환되지 않으므로, 멀티캐스트 인증 관련 데이터를 수집할 수 없습니다.
- RIPv2 인증 데이터는 멀티캐스트로 전송되는 RIP 메시지에 포함되며, Ping 프로토콜과는 무관합니다.
RIPv2 패킷에서 인증 데이터 확인
Wireshark를 사용하여 RIPv2 패킷을 분석하면 멀티캐스트 패킷에 포함된 인증 데이터를 확인할 수 있습니다.
Wireshark 필터 설정
- RIPv2 트래픽 캡처:
- Wireshark에서 다음 필터를 설정하여 RIPv2 패킷을 캡처:
ip.dst == 224.0.0.9 && udp.port == 520
- Wireshark에서 다음 필터를 설정하여 RIPv2 패킷을 캡처:
- RIPv2 인증 데이터 확인:
- RIPv2 헤더를 확장하여 인증 데이터를 확인.
- RIP 패킷에서 인증 섹션은 다음 정보를 포함할 수 있음:
- Authentication Type:
- Type 2: MD5 인증.
- Type 0: 평문 비밀번호.
- Authentication Data:
- 평문 비밀번호 또는 MD5 해시 값.
- Authentication Type:
- 평문 비밀번호 확인:
- 만약 인증이 평문으로 설정되어 있다면, Wireshark의 RIP 패킷 세부정보에서 평문 비밀번호를 볼 수 있습니다.
MD5 인증 해시 분석
RIPv2 인증이 MD5 해시를 사용하는 경우, 캡처된 해시 값을 분석하여 암호화된 비밀번호를 확인할 수 있습니다.
- MD5 인증 데이터 추출:
- RIP 패킷의 Authentication Data 필드에서 MD5 해시 값을 확인.
- 패킷 데이터 활용:
- MD5 인증은 RIP 패킷의 데이터와 비밀번호를 조합하여 생성됩니다.
- 해시 값을 역으로 계산하려면 네트워크 키와 관련 데이터를 알아야 합니다.
- MD5 복호화 불가능:
- MD5는 단방향 해시 함수로 설계되었으므로, 해시 값을 복호화하는 것은 불가능합니다.
- 대신 무차별 대입 공격(Brute Force)이나 사전 공격(Dictionary Attack)을 사용하여 비밀번호를 추측할 수 있습니다.
RIPv2 패킷 구조
RIPv2 패킷은 다음과 같은 구조를 가집니다:
필드 설명
Command | Request(1) 또는 Response(2) |
Version | RIP 버전 (2) |
Routing Domain | 선택적 |
Authentication Type | 2 (MD5) 또는 0 (평문) |
Authentication Data | MD5 해시 또는 평문 비밀번호 |
Route Entries | 라우팅 정보 목록 |
- Authentication Data 필드에 비밀번호나 MD5 해시 값이 포함됩니다.
RIPv2 인증 설정 확인
라우터에서 RIPv2 인증을 설정한 경우, 이를 통해 어떤 인증 방법이 사용되고 있는지 확인할 수 있습니다.
- 평문 인증 설정:
- RIPv2 인증으로 평문 비밀번호를 사용하는 경우, 평문이 멀티캐스트 패킷에 노출됩니다:
router rip version 2 network 192.168.1.0 passive-interface g0/1 ip rip authentication mode text ip rip authentication key mypassword
- RIPv2 인증으로 평문 비밀번호를 사용하는 경우, 평문이 멀티캐스트 패킷에 노출됩니다:
- MD5 인증 설정:
- MD5 인증을 사용하는 경우:
router rip version 2 network 192.168.1.0 passive-interface g0/1 ip rip authentication mode md5 ip rip authentication key-chain mykeychain
- MD5 인증을 사용하는 경우:
Wireshark와 Ping의 역할
- Wireshark:
- RIPv2 멀티캐스트 패킷에서 평문 비밀번호 또는 MD5 해시를 직접 확인할 수 있음.
- 필터: ip.dst == 224.0.0.9 && udp.port == 520.
- Ping:
- ICMP Ping은 RIPv2 인증 데이터와 무관하며, 인증 데이터를 수집하는 데 사용할 수 없음.
해결 방향
- Wireshark로 인증 데이터 캡처:
- Wireshark에서 RIPv2 멀티캐스트 패킷을 분석하여 평문 비밀번호 또는 MD5 해시 확인.
- MD5 해시를 통한 비밀번호 추측:
- MD5 해시를 역으로 계산할 수는 없지만, 무차별 대입(Brute Force) 또는 사전 공격(Dictionary Attack)을 사용해 비밀번호를 추측 가능.
- RIPv2 설정 보안 강화:
- 평문 인증을 사용하는 경우, MD5 인증으로 변경하여 보안을 강화.
- 평문 비밀번호가 네트워크에 노출되지 않도록 RIP 프로토콜을 업그레이드하거나 대체(예: OSPF, EIGRP)하는 것이 권장됩니다.
결론
- Ping은 멀티캐스트로 전송된 RIPv2 인증 데이터를 확인할 수 없습니다.
- Wireshark에서 224.0.0.9를 대상으로 하는 RIPv2 패킷을 캡처하여 평문 비밀번호 또는 MD5 해시 데이터를 직접 확인하세요.
- 캡처된 MD5 해시는 복호화할 수 없으며, 비밀번호를 추측하려면 무차별 대입 공격이 필요합니다. 평문 인증을 사용하는 경우, 네트워크 설정 변경을 검토해야 합니다. 😊
EIGRP !!!
ENHANCED INTERIOR GATEWAY ROUTER PROTOCOL
EIGRP
Enhanced Interior Gateway Routing Protocol
시스코가 애플만큼 독점이 심해요
EIGRP는 시스코 라우터끼리만 가능해요
근데, 풀어줬음
자율관리 시스템 autonmous-system 서울지역 번호가 뭐임? 02 031 그런거임
즉 그렇게 크게 의미있진않은데, 관리번호가 같아야 통신이 가능함
eigrp는 박쥐라서 ripv1방식 ripv2방식으로 다 가능함
wild-mask는 뭐냐? 리눅스의 umask같은거라 생각하면됨
wild-mask = 255.255.255.255 - 서브넷 마스크값
255.255.255.255
- 255.255.255.0
-------------------------------
0.0.0.255
와일드 마스크를 쓰는 이유는? 왜?
컴퓨터가 원래 빼기를 못해, 그래서 2의 보수를 쓰는건데
그래서 컴퓨는 빼기를 어떻게할까? 예를들어
10-5 계산못하니
5+ a =10이렇게 계산하는거지
서브넷에 얼마를 더해야 올 브로드캐스트 주소가 되는데?
를 빠르게 맞추기 위해서 와일드마스크를 쓰는거임, 빼기를 못하니까
즉 우리가 a를 컴퓨터에게 먼저 알려주는거임
eigrp는 버전 2가 없어요 대신에 no-auto summary를 공식으로 써주는거예요 서브넷 사용할꺼야
router rigrp as number:1~65535에서 아무거나 고르는데, 번호가 다르면 통신이 안된다!
sh ip route
하면 eigrp 는 D로 올라옴 대문자 D 내가 모르는 주소들
참고로 이 lab의 네트워크는 다 같은 대역대라, eigrp 와일드마스크 안넣어줘도됨
eigrp의 장점은?
빠른 수렴~
어 에러나고, 막 고장나? 바로 옆에 라우터한테 소식전해줌(소식이 굉장히 빠르다~)
PC1
ip 172.16.1.1/24 172.16.1.254
PC2
ip 172.16.1.2/24 172.16.1.254
PC3
ip 172.16.2.3/24 172.16.2.254
PC4
ip 172.16.2.4/24 172.16.2.254
PC5
ip 172.16.3.5/24 172.16.3.254
PC6
ip 172.16.3.6/24 172.16.3.254
R1
conf t
int s2/0
ip add 172.16.12.1 255.255.255.0
no sh
int e0/0
ip add 172.16.1.254 255.255.255.0
no sh
exit
router eigrp 100
network 172.16.1.0
network 172.16.12.0
end
copy r start
R2
conf t
int s2/0
ip add 172.16.12.2 255.255.255.0
no sh
int s2/1
ip add 172.16.23.2 255.255.255.0
no sh
int e0/0
ip add 172.16.2.254 255.255.255.0
no sh
exit
router eigrp 100
network 172.16.2.0
network 172.16.12.0
end
copy r start
R3
conf t
int s2/0
ip add 172.16.23.3 255.255.255.0
no sh
int e0/0
ip add 172.16.3.254 255.255.255.0
no sh
exit
router eigrp 100
network 172.16.3.0
network 172.16.23.0
end
copy r start
eigrp에서 sh ip ro에서 D가 뭐 약어야>?
EIGRP(EIGRP는 Enhanced Interior Gateway Routing Protocol)에서 show ip route 명령을 실행했을 때 나타나는 D는 **"DUAL"**의 약어입니다. DUAL은 Diffusing Update Algorithm의 줄임말로, EIGRP의 핵심 라우팅 알고리즘을 나타냅니다.
EIGRP와 DUAL
- DUAL은 EIGRP의 라우팅 결정 알고리즘으로, 네트워크에서 최적의 경로(Feasible Successor)를 선택하고 백업 경로(Successor)를 관리합니다.
- DUAL은 라우팅 업데이트를 네트워크에 퍼뜨리며, 루프가 없는 경로를 계산하도록 설계되었습니다.
D 표시의 의미
- show ip route 명령에서 D는 EIGRP로 학습된 라우팅 경로를 의미합니다.
- 출력 예시:
D 192.168.1.0/24 [90/2170112] via 10.0.0.1, 00:00:05, FastEthernet0/0
- D: EIGRP로 학습된 경로.
- 192.168.1.0/24: 목적지 네트워크.
- [90/2170112]: [관리 거리/메트릭 값].
- 관리 거리(90): EIGRP에서 기본적으로 사용하는 신뢰도 값.
- 메트릭 값(2170112): 경로의 비용(대역폭, 지연 등).
- via 10.0.0.1: 이 경로로 패킷이 전달되는 다음 홉 IP.
- FastEthernet0/0: 이 경로로 나가는 인터페이스.
EIGRP 관련 라우팅 기호
show ip route 명령에서 나타날 수 있는 주요 기호들:
기호 의미
D | EIGRP로 학습된 경로 |
C | 직렬 연결된 네트워크(Connected) |
L | 직접 연결된 인터페이스(Local) |
S | 정적 경로(Static) |
R | RIP로 학습된 경로 |
O | OSPF로 학습된 경로 |
B | BGP로 학습된 경로 |
DUAL의 작동 원리
- Successor와 Feasible Successor:
- EIGRP는 최적 경로(Successor)와 백업 경로(Feasible Successor)를 관리.
- 네트워크 장애 발생 시 DUAL은 Successor를 교체하여 빠르게 라우팅을 복구.
- 메트릭 계산:
- EIGRP는 대역폭, 지연, 신뢰도, 로드 등의 매개변수를 기반으로 메트릭을 계산.
- 가장 낮은 메트릭을 가진 경로가 Successor로 선택.
- 루프 방지:
- DUAL은 루프가 없는 경로를 보장하기 위해 Feasibility Condition을 사용.
결론
- **D**는 EIGRP 경로를 나타내며, DUAL 알고리즘을 통해 학습된 경로를 의미합니다.
- EIGRP는 빠른 복구와 효율적인 라우팅 결정을 위해 DUAL을 사용하며, 네트워크 안정성과 성능을 높이는 데 기여합니다. 😊
Diffusing update algorithm이 dual 줄임말인건 알겠어, 근데 이게왜 eigrp 핵심 라우팅 알로리즘이랴ㅐ?
**Diffusing Update Algorithm (DUAL)**이 EIGRP의 핵심 라우팅 알고리즘인 이유는 EIGRP가 네트워크에서 빠르고 안정적이며 루프 없는 라우팅을 구현하기 위해 DUAL을 설계 중심에 두었기 때문입니다. DUAL은 EIGRP의 동작 방식을 정의하는 알고리즘으로, 라우팅 프로토콜의 신뢰성과 효율성을 보장하는 핵심 역할을 수행합니다.
1. DUAL의 주요 목적
DUAL은 다음과 같은 핵심 목표를 가지고 설계되었습니다:
- 최적 경로 계산:
- 네트워크의 대역폭, 지연, 로드, 신뢰도 등의 매개변수를 사용하여 최적의 경로(Successor)를 선택.
- 루프 방지:
- 라우팅 루프가 발생하지 않도록 보장하며, Feasibility Condition(FC)을 사용해 루프 없는 백업 경로를 계산.
- 빠른 복구:
- 최적 경로가 실패했을 때, 사전에 계산된 Feasible Successor(백업 경로)를 즉시 활성화하여 네트워크 복구 속도를 극대화.
- 효율적 라우팅 업데이트:
- 네트워크 변화가 발생했을 때 필요한 부분에만 라우팅 업데이트를 전파하여 대역폭과 CPU 자원을 절약.
2. DUAL이 EIGRP에서 중요한 이유
(1) 라우팅 루프 방지
- 라우팅 루프는 네트워크 성능에 치명적이며, 패킷 손실과 불필요한 대역폭 소모를 유발합니다.
- DUAL은 **Feasibility Condition(FC)**이라는 조건을 사용해 루프 없는 경로를 보장합니다:
- Feasibility Condition (FC):
- "경로의 AD(Advertised Distance)가 현재 Successor의 FD(Feasible Distance)보다 작아야 한다."
- AD: 네트워크로부터 광고받은 경로의 비용.
- FD: 현재 네트워크에서 Successor 경로까지의 총 비용.
- 이 조건을 만족하는 경로만 Feasible Successor로 선택되어 루프를 방지.
- Feasibility Condition (FC):
(2) 빠른 경로 복구
- EIGRP는 네트워크 변화(예: 링크 다운)에 즉시 대응해야 합니다.
- DUAL은 Feasible Successor를 미리 계산해두어 링크 다운 시 별도의 계산 없이 즉시 대체 경로로 전환합니다.
- 이는 OSPF 같은 프로토콜에서 Link-State 알고리즘을 통해 모든 네트워크를 다시 계산해야 하는 것보다 훨씬 빠릅니다.
(3) 최소화된 라우팅 업데이트
- DUAL은 네트워크의 모든 노드가 완전한 정보(Topology Table)를 공유하므로, 네트워크가 변경될 때 필요한 노드에만 업데이트를 전송합니다.
- 이는 RIP의 전송 방식(전체 테이블 업데이트)보다 대역폭과 CPU를 훨씬 덜 소모합니다.
(4) 다중 경로 지원
- EIGRP는 여러 경로를 사용할 수 있으며, DUAL은 이러한 경로를 관리합니다:
- Equal-Cost Multi-Path (ECMP):
- 동일한 비용의 경로를 여러 개 사용할 수 있음.
- Unequal-Cost Multi-Path:
- variance 명령어를 통해 비용이 다른 경로도 사용할 수 있도록 설정 가능.
- Equal-Cost Multi-Path (ECMP):
3. DUAL의 동작 원리
DUAL은 다음과 같은 단계를 통해 작동합니다:
(1) Successor 계산
- Successor는 가장 낮은 Feasible Distance(FD)를 가진 최적 경로입니다.
- DUAL은 Successor를 계산하여 라우팅 테이블에 추가합니다.
(2) Feasible Successor 계산
- Feasible Successor는 Failover(장애 복구)를 위해 미리 계산된 백업 경로입니다.
- Feasibility Condition을 만족하는 경로 중에서 선택됩니다.
(3) 네트워크 변경 대응
- 네트워크의 상태 변화(예: 링크 다운, 비용 변경) 시, DUAL은 다음과 같이 동작합니다:
- Feasible Successor가 존재하면 즉시 활성화.
- Feasible Successor가 없으면 Diffusing State로 들어가 다른 노드와 협력해 새로운 Successor를 계산.
4. DUAL의 차별점
- 하이브리드 프로토콜:
- DUAL은 링크 상태 프로토콜(OSPF)과 거리 벡터 프로토콜(RIP)의 장점을 결합.
- 빠른 업데이트(거리 벡터)와 안정성(링크 상태)을 동시에 제공.
- 고효율성:
- 필요할 때만 업데이트를 전송하며, CPU와 대역폭 사용량이 적음.
- 루프 없는 동작:
- Feasibility Condition을 통해 루프 없는 안정적 경로를 보장.
5. 비교: DUAL vs. OSPF의 SPF
- DUAL (EIGRP):
- Successor와 Feasible Successor를 사용.
- 장애 시 즉시 복구.
- 더 적은 네트워크 계산으로 효율적.
- SPF (OSPF):
- Dijkstra 알고리즘 사용.
- 링크 상태 전체를 재계산.
- 복구 속도가 느릴 수 있음.
6. 요약
DUAL이 EIGRP의 핵심 라우팅 알고리즘인 이유는 다음과 같습니다:
- 빠른 장애 복구: Feasible Successor를 통해 빠르게 경로를 전환.
- 루프 방지: Feasibility Condition으로 안정적 라우팅.
- 효율성: 필요한 경우에만 업데이트를 전송하여 네트워크 자원을 절약.
- 다중 경로 지원: Equal-Cost와 Unequal-Cost 경로를 모두 활용.
DUAL은 EIGRP를 효율적이고 안정적인 라우팅 프로토콜로 만들어 주는 핵심 기술입니다. 😊
이제 올핑이 떨어지게 하자 R3,나 R4 둘중 하나에 넣어주면 된다 WHY? 둘이가 100,200
아무거나 넣을 수 있는 가운데에 위치해있으니까
r3랑 r4는 100이랑 200 뭘 넣어야할까? elgrp 에서!
해결--> r3또는 r4가 eigrp 100, 200을 둘 다 가질 수 있도록 설정하면돼
3에 넣거나 4에 넣거나 자율 3에 넣음
router eigrp 100 network 172.16.3.0 0.0.0.255 network 172.16.13.0 0.0.0.255 network 172.16.23.0 0.0.0.255 no auto-summary redistribute eigrp 200 <----추가 router eigrp 200 network 172.16.34.0 0.0.0.3 no auto-summary redistribute eigrp 100 <----추가 end copy r start
1216-04_EIGRP LAB CONFIG
PC1
ip 172.16.1.1/24 172.16.1.254
PC2
ip 172.16.1.2/24 172.16.1.254
PC3
ip 172.16.2.3/24 172.16.2.254
PC4
ip 172.16.2.4/24 172.16.2.254
PC5
ip 172.16.3.5/24 172.16.3.254
PC6
ip 172.16.3.6/24 172.16.3.254
PC7
ip 172.16.4.7/24 172.16.4.254
PC8
ip 172.16.4.8/24 172.16.4.254
PC9
ip 172.16.5.9/24 172.16.5.254
PC10
ip 172.16.5.10/24 172.16.5.254
PC11
ip 172.16.6.11/24 172.16.6.254
PC12
ip 172.16.6.12/24 172.16.6.254
R1
R1
conf t
int s2/0
ip add 172.16.13.1 255.255.255.0
no sh
int e0/0
ip add 172.16.1.254 255.255.255.0
no sh
exit
router eigrp 100
network 172.16.1.0 0.0.0.255
network 172.16.13.0 0.0.0.255
end
copy r start
R2
conf t
int s2/0
ip add 172.16.23.2 255.255.255.0
no sh
int e0/0
ip add 172.16.2.254 255.255.255.0
no sh
exit
router eigrp 100
network 172.16.2.0 0.0.0.255
network 172.16.23.0 0.0.0.255
end
copy r start
R3
conf t
int s2/0
ip add 172.16.13.3 255.255.255.0
no sh
int s2/1
ip add 172.16.23.3 255.255.255.0
no sh
int s2/2
ip add 172.16.34.1 255.255.255.252
no sh
int e0/0
ip add 172.16.3.254 255.255.255.0
no sh
exit
router eigrp 100
network 172.16.3.0 0.0.0.255
network 172.16.13.0 0.0.0.255
network 172.16.23.0 0.0.0.255
no auto-summary
redistribute eigrp 200
router eigrp 200
network 172.16.34.0 0.0.0.3
no auto-summary
redistribute eigrp 100
end
copy r start
R4
conf t
int s2/0
ip add 172.16.34.2 255.255.255.252
no sh
int s2/1
ip add 172.16.45.4 255.255.255.0
no sh
int s2/2
ip add 172.16.46.4 255.255.255.0
no sh
int e0/0
ip add 172.16.4.254 255.255.255.0
no sh
exit
router eigrp 200
network 172.16.4.0 0.0.0.255
network 172.16.45.0 0.0.0.255
network 172.16.46.0 0.0.0.255
network 172.16.34.0 0.0.0.3
no auto-summary
end
copy r start
R5
conf t
int s2/0
ip add 172.16.45.5 255.255.255.0
no sh
int e0/0
ip add 172.16.5.254 255.255.255.0
no sh
exit
router eigrp 200
network 172.16.5.0 0.0.0.255
network 172.16.45.0 0.0.0.255
no auto-summary
end
copy r start
R6
conf t
int s2/0
ip add 172.16.46.6 255.255.255.0
no sh
int e0/0
ip add 172.16.6.254 255.255.255.0
no sh
exit
router eigrp 200
network 172.16.6.0 0.0.0.255
network 172.16.46.0 0.0.0.255
no auto-summary
end
copy r start
오늘 메모 한것
오전 9:22 2024-12-16
paramiko 는 파이썬 ssh 사용가능 하게 하는 네트워크 모듈
net miko 는 파이썬 telnet 사용가능 하게 하는 네트워크 모듈
파이썬은 윈도우랑 리눅스랑 다 같이 공유 가능
코드를 따로 링크안해도 상관없다가 큰 장점!
exit()하면 나가짐
바탕화면에 주피터 노트북 bat 파일->마우스 우클릭->바로가기 하기
거기서 속성 고급에 관리자모드로 실행 열고
안되면
e:py_date에서 check 폴더 지우기(백업폴더임) 그래도 안열리면
그냥 ide로 열기 ㄱㄱ
import paramiko
ssh = paramiko 하고 팁키누르면 paramiko의 모듈들이 나옴
서버는 들어오게하고
클라이언트는 들어가게하는거임
서버랑 클라이언트의 차이
사전에서는 서버를 정보를 제공하는 측, ssh로 따지면 얘는 들어오게하는거
클라이언트는 정보를 반대로 요청하는 측, ssh로 따지면 얘는 들어가는것
파라미코라는 프로그램에 .(점)이라고 붙어있는거는 다 그것들의 기능
모듈이라는게 프로그램
다음 클래스라는게 있어
함수나 모듈을 다 모아둔게 클래스, 집합임
insert는 개체
프로그램 다음 . 나오는건 모듈이라고 생각
() 함수 없으면 변수
파이썬은 아주 단순해요 변수랑 함수만 구분하면되는데
변수 함수 클래스 이 세개만 구분하면 돼요
클래스는ㅣ 캐멀 케이스라고 하고
식별자는 1, 캐멀케이스(낙타) 2,스네이크 케이스가있는데 (뱀) --> 소문자들이 이어진게 뱀같더라, 그래서 스네이크 케이스
만약 캐멀케이스에서 대문자로 시작하면 클래스고(클래스는 완성된 프로그램을 뜻함
다 들어가있는거임), 파이썬에서는 클래스 밖에 없음
스네이크 케이스는 소문자로 시작하는데
전세계 프로그래머들이 약속을 했는데, 단어와 단어가 합쳐지면 ,첫번째는
대문자로 쓰자
그래야 이거 합성어구나라는걸 알게되거든
whY? 대문자를 잘못쓰면 클래스가되니까, 오해 방지용
합쳐지는 단어의 첫글자는 대문자로 표기해라 ItemList LoginStaus CharaterHP
만약 이걸 소문자로 쓰고싶다?-->단어와 단어사이에 언더바를 집어넣어라 item_list login_status character_hp
print()--> 함수인 이유는 두개, 괄호가 있고, 소문자거든 그래서 이걸 '프린트'함수라고 말하는거임
list() 리스트 함수
soup.select()함수 .(점)이 붙어서 특별하지만 함수임
math.pi는 변수임
BeautifulSoup() 클래스, 변수 (대문자니까)
표현식: 값을 만들어내는 간단한 코드고
표현식들이 모여서 문장이 되고
그 문장들이 모여서 프로그램이 된다
하드에 저장되어있다가, 더블클릭하면 메모리로 들어감
모든 프로그램은 메모리에서 실행되거든
만약 메모리에 실행안되면 죽은거임
얘가 그냥 메모리가 데이터를 살아내게 하냐? ㄴㄴ
cpu가 ok 사인 떨어져야 메모리 데이터가 살아남
연산은 cpu에서 함 alu에서 작동
캐시 메모리는 하드 디스크가 시속 50km에요 캐시는 70km
cpu 100km
컴퓨터 중에 cpu 속도를 따라갈 수 있는 hw는 없어요, 지구상에는
cpu안에 캐시메모리 넣어놓았는데 l1 l2 l3가 있고,
캐시 메모리는 왜 넣어놓았냐? 메모리가 속도가 느리니까, 메모리가
cpu에게 메모리 넘겨주기보다, 미리 캐시가 저장된 메모리를 cpu에게
넘겨주는거임, 비서라고 생각하기
프로그램은 죽은거고, 그게 메모리로 올라가면, 프로세스가 됨, 살아난거임
프로세스는 두개로 나눔, 백그라운, 포그라운드
그래서 백그라운드는 노크를 해서, 앞으로 나오게 하는거고
그걸 우분투에서 xinetd라고 super daemon이고
그래서 이 처리 과정이 전부 ok 사인이 들어가게할려면,
cpu 오케이가 필요한거임
파이썬은 프로그램 모듈이라고 부름
프로그램이라고 부를때가 있고 모듈이라고 부를때가 있는데
단독으로 사용할때 1, 프로그램 2, 패키지
윈도우에서는 1, 프로그램, 2패키지
리눅스에선 패키지
파라미코는 패키지라고함 단독으로 쓰일때
paramiko.SSHClient()
파이썬은 함수가 호출 당하면 함수라고 안부르고 모듈이라고 부름
자바는 함수 개념이 없음, 다 모듈이라고 하고 패키지라고 함
파이썬은 두가지로 부름 함수냐 모듈이냐
함수일땐, 내가 단독으로 쓰는거(print())라는거, 근데 parmiko.SSHClient() 같이 호출당한 SSH이놈은
모듈이라고 부르는거임
paramiko.누르고 탭키 쪽나오는건 함수라고 부르고, 그걸 부르면 다 괄호를 붙여줘여하는거임
ssh. 하고 또 점 찍고 탭키 누르면 짜르르 뜨는데
ssh의 기능들인거임
ssh.connect(연결) ssh.close(연결 종료한다는 얘기)
ssh.set_missiong_host_key_policy() <---괄호 붙여주기 (함수니까)
ssh.set_missiong_host_key_policy(paramiko.AutoAddPolicy())
포트 넘버 (1~65,535번까지 있어요) 네트워크 통신은 저거뿐이에요 우리는 저걸로 인터넷하는거예요
저거 다 몰라도 됨, 한 30개 정도는 설천에 외워야하고 아래 기본은 다 외워야해요
20,21 22 23 25 80(443) 110 119
TCP 프로토콜로 동작하는 애들--> ftp ssh telent SMTP HTTP(HTTPs) POP3 NNTP
파일서버 원격서버 메일서버 웹서버 메일서버 뉴스서버
53 67,68 69 169
UDP 프로토콜로 동작하는 얘들---> DNS DHCP TFTP SNMP
도메인네임 네트워크 관리 FTP간소화 모니터링
서버
#코드 작성기
import paramiko
ssh = paramiko.SSHClient
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect("192.168.10.33", 22, "root") #로키9으로 입력
#파이썬에서 문자열은 "문자" 또는 '문자' 기호를 사용합니다
문자열을 표기하고싶은면 큰따옴표 작은따옴표 쓰기
파이썬은 큰따옴표 작은 따옴표는 정해져있지않지만 우린 자바 정책을 따를거예요
자바는 큰따옴표 작은따옴표가 정해져있어요
두글자이상은 큰따옴표
한글자는 작은 따옴표
포트번호는 숫자라서 문자열 표기를 안하는거임
암호는 문자열이에요 숫자가 아니라
그래서""하는거임
stdin, stdout, stderr = ssh.exec_command()
ssh.exec_command()는 내가 ()에 내 입력을 넣는다는거임
그래서 그게 stdin이 되고 stdout되고 stderr가 되는거임
결과를 보고싶으면 print()
----------------------------------------------------------------------------------------------------
최종 코드
#코드 작성기
import paramiko
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect("192.168.10.33", 22, "roo t", "12345678") #로키9으로 입력
stdin, stdout, stderr = ssh.exec_command("ls")
print(stdout.readlines()) #readline은 한줄 readlines는 모든 내용
for i in result :
print(i)
ssh.close()
#파이썬에서 문자열은 "문자" 또는 '문자' 기호를 사용합니다
이 코드의 문제점: 비밀번호가 노출되었음
--------------------------------------------------------------------------------------
stdin, stdout, stderr = ssh.exec_command("tail -f /var/log/sercure")
하면 누가 나에대 들어온지 로그 추적가능함
[조별 실습]
조원꺼 한번에 땡기는 코드 만들기
그거 조원이 4명이면 그걸 한번에 땡기는 코드 만들기
계정은 ls -l /home
#코드 작성기
import paramiko
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect("192.168.10.33", 22, "root", "12345678") #로키9으로 입력
stdin, stdout, stderr = ssh.exec_command("ls -l /home")
#print(stdout.readlines()) #readline은 한줄 readlines는 모든 내용
result1 = stdout.readlines()
ssh.connect("192.168.10.31", 22, "root", "12345678") #로키9으로 입력
stdin, stdout, stderr = ssh.exec_command("ls -l /home")
result2 = stdout.readlines()
ssh.connect("192.168.10.32", 22, "root", "12345678") #로키9으로 입력
stdin, stdout, stderr = ssh.exec_command("ls -l /home")
result3 = stdout.readlines()
#print(result)
print("--------user1-----------\n")
for i in result1 :
print(i)
print("--------user2-----------\n")
for i in result2 :
print(i)
print("--------user3-----------\n")
for i in result3 :
print(i)
ssh.close()
#파이썬에서 문자열은 "문자" 또는 '문자' 기호를 사용합니다
여기서 두줄만 추가하면 끝나는거임
첫번째꺼는 ip list가 나와야함
이 작업을 조원만큼 반복해야죠
그래서 그 for문 반복하는거 들어가면 됨
결과는 나와도 이 소스코드는 가독성도 떨어지고 속도도 느림, 코드를 더 줄여야해
-------------------------------------------------------------------------------------------
혼자 연습
#코드 작성기
import paramiko
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
#print(stdout.readlines()) #readline은 한줄 readlines는 모든 내용
ip_list = ["192.168.10.31", "192.168.10.32"]
for i in ip_list :
ssh.connect(ip_list, 22, "root", "12345678")
stdin, stdout, stderr = ssh.exec_command("ls -l /home")
result = stdout.readlines()
for j in result:
print(j)
# print(result)
ssh.close()
-----------------------------------------------------------------------------------------------
파이썬의 기본 규칙은 하나의 변수에는 하나의 값만 대입할 수 있음
근데 특수 값을 이용하여. 하나의 변수에 여러개의 값을 대입할 수 있음
그 변수가 뭐냐면
[list] (tuple) {dictionary} 함수들임 집어넣으면 여러개 값 대입 가능~
------------------------------------------------------------------------------------
파이썬-점프 투 파이썬 기초책 보기!
위키북스는 서버에 책을 만들고, 책을 다 오픈하는 고마운 사이트~
기간은 올해 말까지 혼자 다 공부하고와요~ 끝내고 와야해요!
우리 기초로 시간낭비하지말자구요~!
일단 여기서 우리 파이썬은 멈추고~
이코드는 가지고 있어욧
===매직키 알려줄게요====
%%writerfile %%writefile C:/Users/admin/Desktop/server_log.py
.py를 pdf나 docx로 바꾸면 그 파일로 저장됨
그리고 마지막에
input("엔터키를 입력해서 종료해주세요")
파이썬에서는 경로를 포기할때 역슬래시로
C:\Users\admin\Desktop
c드라이브 밑에 users 밑에 admin 폴더 밑에 이렇게 읽는데
만약 저렇게 역슬래시 기호를 쓸꺼면 한번더 써줘야함
그래서 익스케이프가되는건데
두개씩 치기 힘드니까
C:/Users/admin/Desktop
로 바꿔서 쓰는거임
코드 작성기로 하는 사람은 그냥 파일 찍어서 바탕화면에 저장하면되고
주피터 노트북 있는 사람은 저거 경로 적기
실천에서는 그래서 cron 명령어가 걸려있는게 많음
스크립트가 겁나 많아서 그걸로 관리하는거임
파이썬에서 파일을 만드는 가장 쉬운방법은
>하면 끝나느거임 그냥
wget http://192.168.10.250/server_log.py
pip install paramiko
pip3 install paramiko
python server_log.py
192.168.10.42 user2
리눅스에서 파이썬 사용하기
dnf install -y python3
실행하는 방법은 pyhon 파일명.py
pip3 install 패키지명
리눅스에서는 py 어떻게 만들어요? gedit으로 만듬
c언는 중괄호 안에있는걸 실행하고
파이썬은 들여쓰기를 실행함 {민감데쓰{
들여쓰기는 스페이스바 4칸임 tap키 눌러서 똑같이 만들기
import paramiko
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect("192.168.10.33", 22, "root", "12345678")
stdin, stdout, stderr = ssh.exec_command("w")
result = stdout.readlines()
for i in result :
print(i)
ssh.close()
-----------------------------------------------------------------------------------
import paramiko
import sys
server_ip = sys.argv[1]
user_name = sys.argv[2]
user_pass = sys.argv[3]
linux_cmd = sys.argv[4]
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(server_ip, 22, user_name, user_pass)
stdin, stdout, stderr = ssh.exec_command(linux_cmd)
result = stdout.readlines()
for i in result :
print(i)
ssh.close()
sys.argv는 입력받겠다는거임
순서는 1234로
0은 왜 안됨? 0은 소스코드 파일 그자체를 말함
cmd에 명령어를 입력해서 구동시키게하는게 원리임
-----------------------------------------------------------------------------------------------------
31~47 로그 수집하는거 for문으로 해보기, 참고로 [list문]은 안씀
str 문자에 +하면 문자로 붙어버림
for i in (31,48):
ssh.connect("192.168.10."+str(i), 22, "root", "12345678")
---------------------------------------------------------------------------------------------------------
오후 1:29 2024-12-16
PC3
ip 10.1.2.3 10.1.2.254
PC4
ip 10.1.2.4 10.1.2.254
PC5
ip 192.168.3.5 192.168.3.254
PC6
ip 192.168.3.6 192.168.3.254
R1
conf t
int s2/0
ip add 192.168.12.1 255.255.255.0
no sh
int loopback 0
ip add 172.16.1.254 255.255.255.0
int loopback 1
ip add 172.16.1.254 255.255.255.0
int loopback 2
ip add 172.16.2.254 255.255.255.0
int loopback 3
ip add 172.16.3.254 255.255.255.0
int loopback 4
ip add 172.16.4.254 255.255.255.0
int loopback 5
ip add 172.16.5.254 255.255.255.0
int loopback 6
ip add 172.16.6.254 255.255.255.0
router rip
version 2
network 172.16.1.0
network 172.16.2.0
network 172.16.3.0
network 172.16.4.0
network 172.16.5.0
network 172.16.6.0
network 172.16.7.0
network 192.168.12.0
no auto-summary
end
copy r start
R2
conf t
int s2/0
ip add 192.168.12.2 255.255.255.0
no sh
int s2/1
ip add 192.168.23.1 255.255.255.0
no sh
int e0/0
ip add 10.1.2.254 255.255.255.0
no sh
router rip
version 2
network 192.168.12.0
network 192.168.23.0
network 10.1.2.0
no auto-summary
end
copy r start
R3
conf t
int s2/0
ip add 192.168.23.2 255.255.255.0
no sh
int e0/0
ip add 192.168.3.254 255.255.255.0
no sh
router rip
version 2
network 192.168.3.0
network 192.168.23.0
no auto-summary
end
copy r start
----------------------------------------------------------------------------------
수동써머리
r1이 r2에게 네트워크 정보를 알려줄때, 요약안하고
하나씩하나씩 알려주는거
why? 트래픽과다로 다운되는거 방지
R1에서 7개 네트워크를 집어넣지않고(Loopback하지않고)
ip summry-address rip 172.16.0.0 255.255.248.0
한그룹당 8개라는거야
r*은 스태틱임
-----------------------------------------------------------------------------------------------
슈퍼넷 공식
C클래스 수퍼넷 = b클래스 서브넷이랑 같아요
B클래스 수브넷 = A클래스 서브넷이랑 같다! 라는 공식이 생깁니다
예)
22개의 C클라스 서브넷이 있어요 이걸, RIP으로 다 쳐줘야해요
근데 너무 노가다고 힘들죠?
1,2,3,4,...22개의 그룹...다 쳐줘야하죠?
그럼
128 64 32 16 8 4 2 1 <<< 컴퓨터 개수
1 2 4 8 16 32 64 128 <<< 그룹 갯수
a=8 = 21,777,614대의 pc를 사용할 수 있다고
b=16 = 65,535대의 pc를 사용할 수 있음
c=24 = 255대의 pc를 사용할 수 있음
네트워크가 있어요
기본(a=8비트, b=16비트, c=24)이게 한개의 그룹을 뜻하는거임
1111 1111. 1111 1111. 1111 1111. 0000 0000 /24
이런게 7개가 있다고 밑에
22개는 32개의 그룹에 포함되어야해요
-----------------------------------------------------------------------------------------------------------
RIPv2 인증할꺼임
보통 인증나오면 그 프로토콜은 끝난거임
브로드캐스트는 평문으로 다보여서 인증을 못함
키 넘버를 관리하는게 키 이름임
중요한건 상대방이랑 키 넘버랑 비밀번호가 맞아야함! 이름은 상관없음 대소문자도 구문해야함
R1에 conf t
key chain key_name
key key_number
key-string password
int s 2/0
ip rip authentication key-chain key_name
ip rip authentication mode md5| text md5는 암호화 text는 평문
r1 r2는 평문으로 비번은 banana 12번
r2 r3는 암호화 비번은 apple 23번
-------------------------------------------------------------------------------------------------------
PC1
ip 172.16.1.1/24 172.16.1.254
PC2
ip 172.16.1.2/24 172.16.1.254
PC3
ip 172.16.2.3/24 172.16.2.254
PC4
ip 172.16.2.4/24 172.16.2.254
PC5
ip 172.16.3.5/24 172.16.3.254
PC6
ip 172.16.3.6/24 172.16.3.254
R1
conf t
int s2/0
ip add 172.16.12.1 255.255.255.0
no sh
int e0/0
ip add 172.16.1.254 255.255.255.0
no sh
router rip
version 2
network 172.16.1.0
network 172.16.12.0
no auto-summary
end
copy r start
R2
conf t
int s2/0
ip add 172.16.12.2 255.255.255.0
no sh
int s2/1
ip add 172.16.23.2 255.255.255.0
no sh
int e0/0
ip add 172.16.2.254 255.255.255.0
no sh
router rip
version 2
network 172.16.2.0
network 172.16.12.0
network 172.16.23.0
no auto-summary
end
copy r start
R3
conf t
int s2/0
ip add 172.16.23.3 255.255.255.0
no sh
int e0/0
ip add 172.16.3.254 255.255.255.0
no sh
router rip
version 2
network 172.16.3.0
network 172.16.23.0
no auto-summary
end
copy r start
암호화 시작
R1
conf t
key chain master
key 12
key-string banana
int s2/0
ip rip authentication key-chain master
ip rip authentication mode text
end
copy r start
R2
conf t
key chain master
key 12
key-string banana
int s2/0
ip rip authentication key-chain master
ip rip authentication mode text
end
copy r start
R2
conf t
key chain master
key 12
key-string banana
int s2/0
ip rip authentication key-chain master
ip rip authentication mode text
end
copy r start
R2
conf t
key chain master
key 23
key-string apple
int s2/1
ip rip authentication key-chain master
ip rip authentication mode md5
end
copy r start
R3
conf t
key chain master
key 23
key-string apple
int s2/0
ip rip authentication key-chain master
ip rip authentication mode md5
end
copy r start
-------------------------------------------------------------------------------------------------
EIGRP
Enhanced Interior Gateway Routing Protocol
시스코가 애플만큼 독점이 심해요
EIGRP는 시스코 라우터끼리만 가능해요
근데, 풀어줬음
자율관리 시스템 autonmous-system 서울지역 번호가 뭐임? 02 031 그런거임
즉 그렇게 크게 의미있진않은데, 관리번호가 같아야 통신이 가능함
eigrp는 박쥐라서 ripv1방식 ripv2방식으로 다 가능함
wild-mask는 뭐냐? 리눅스의 umask같은거라 생각하면됨
wild-mask = 255.255.255.255 - 서브넷 마스크값
255.255.255.255
- 255.255.255.0
-------------------------------
0.0.0.255
와일드 마스크를 쓰는 이유는? 왜?
컴퓨터가 원래 빼기를 못해, 그래서 2의 보수를 쓰는건데
그래서 컴퓨는 빼기를 어떻게할까? 예를들어
10-5 계산못하니
5+ a =10이렇게 계산하는거지
서브넷에 얼마를 더해야 올 브로드캐스트 주소가 되는데?
를 빠르게 맞추기 위해서 와일드마스크를 쓰는거임, 빼기를 못하니까
즉 우리가 a를 컴퓨터에게 먼저 알려주는거임
eigrp는 버전 2가 없어요 대신에 no-auto summary를 공식으로 써주는거예요 서브넷 사용할꺼야
router rigrp as number:1~65535에서 아무거나 고르는데, 번호가 다르면 통신이 안된다!
sh ip route
하면 eigrp 는 D로 올라옴 대문자 D 내가 모르는 주소들
참고로 이 lab의 네트워크는 다 같은 대역대라, eigrp 와일드마스크 안넣어줘도됨
eigrp의 장점은?
빠른 수렴~
어 에러나고, 막 고장나? 바로 옆에 라우터한테 소식전해줌(소식이 굉장히 빠르다~)
-------------------------------------------------------------------------------------------------------
1216-03_EIGRP LAB CONFIG
PC1
ip 172.16.1.1/24 172.16.1.254
PC2
ip 172.16.1.2/24 172.16.1.254
PC3
ip 172.16.2.3/24 172.16.2.254
PC4
ip 172.16.2.4/24 172.16.2.254
PC5
ip 172.16.3.5/24 172.16.3.254
PC6
ip 172.16.3.6/24 172.16.3.254
R1
conf t
int s2/0
ip add 172.16.12.1 255.255.255.0
no sh
int e0/0
ip add 172.16.1.254 255.255.255.0
no sh
exit
router eigrp 100
network 172.16.1.0
network 172.16.12.0
end
copy r start
R2
conf t
int s2/0
ip add 172.16.12.2 255.255.255.0
no sh
int s2/1
ip add 172.16.23.2 255.255.255.0
no sh
int e0/0
ip add 172.16.2.254 255.255.255.0
no sh
exit
router eigrp 100
network 172.16.2.0
network 172.16.12.0
end
copy r start
R3
conf t
int s2/0
ip add 172.16.23.3 255.255.255.0
no sh
int e0/0
ip add 172.16.3.254 255.255.255.0
no sh
exit
router eigrp 100
network 172.16.3.0
network 172.16.23.0
end
copy r start
-------------------------------------------------------------------------------------------------------
1216-04_EIGRP LAB CONFIG
PC1
ip 172.16.1.1/24 172.16.1.254
PC2
ip 172.16.1.2/24 172.16.1.254
PC3
ip 172.16.2.3/24 172.16.2.254
PC4
ip 172.16.2.4/24 172.16.2.254
PC5
ip 172.16.3.5/24 172.16.3.254
PC6
ip 172.16.3.6/24 172.16.3.254
PC7
ip 172.16.4.7/24 172.16.4.254
PC8
ip 172.16.4.8/24 172.16.4.254
PC9
ip 172.16.5.9/24 172.16.5.254
PC10
ip 172.16.5.10/24 172.16.5.254
PC11
ip 172.16.6.11/24 172.16.6.254
PC12
ip 172.16.6.12/24 172.16.6.254
R1
R1
conf t
int s2/0
ip add 172.16.13.1 255.255.255.0
no sh
int e0/0
ip add 172.16.1.254 255.255.255.0
no sh
exit
router eigrp 100
network 172.16.1.0 0.0.0.255
network 172.16.13.0 0.0.0.255
end
copy r start
R2
conf t
int s2/0
ip add 172.16.23.2 255.255.255.0
no sh
int e0/0
ip add 172.16.2.254 255.255.255.0
no sh
exit
router eigrp 100
network 172.16.2.0 0.0.0.255
network 172.16.23.0 0.0.0.255
end
copy r start
R3
conf t
int s2/0
ip add 172.16.13.3 255.255.255.0
no sh
int s2/1
ip add 172.16.23.3 255.255.255.0
no sh
int s2/2
ip add 172.16.34.1 255.255.255.252
no sh
int e0/0
ip add 172.16.3.254 255.255.255.0
no sh
exit
router eigrp 100
network 172.16.3.0 0.0.0.255
network 172.16.13.0 0.0.0.255
network 172.16.23.0 0.0.0.255
no auto-summary
router eigrp 200
network 172.16.34.0 0.0.0.3
no auto-summary
router eigrp 100
network 172.16.0.0
redistribute eigrp 200
exit
router eigrp 200
network 172.16.0.0
redistribute eigrp 100
end
copy r start
R4
conf t
int s2/0
ip add 172.16.34.2 255.255.255.252
no sh
int s2/1
ip add 172.16.45.4 255.255.255.0
no sh
int s2/2
ip add 172.16.46.4 255.255.255.0
no sh
int e0/0
ip add 172.16.4.254 255.255.255.0
no sh
exit
router eigrp 200
network 172.16.4.0 0.0.0.255
network 172.16.45.0 0.0.0.255
network 172.16.46.0 0.0.0.255
network 172.16.34.0 0.0.0.3
no auto-summary
end
copy r start
R5
conf t
int s2/0
ip add 172.16.45.5 255.255.255.0
no sh
int e0/0
ip add 172.16.5.254 255.255.255.0
no sh
exit
router eigrp 200
network 172.16.5.0 0.0.0.255
network 172.16.45.0 0.0.0.255
no auto-summary
end
copy r start
R6
conf t
int s2/0
ip add 172.16.46.6 255.255.255.0
no sh
int e0/0
ip add 172.16.6.254 255.255.255.0
no sh
exit
router eigrp 200
network 172.16.6.0 0.0.0.255
network 172.16.46.0 0.0.0.255
no auto-summary
end
copy r start
---------------------------------------------------------------------------------
r3랑 r4는 100이랑 200 뭘 넣어야할까? elgrp 에서!
해결--> r3또는 r4가 eigrp 100, 200을 둘 다 가질 수 있도록 설정하면돼
3에 넣거나 4에 넣거나 자율 3에 넣음
--------------------------------------------------------------