티스토리 뷰
>>python3 설치
>>wget 설치
#yum install wget -y
>> www.pyhton.org 사이트에서 주소 복사해오기
#wget https://www.python.org/ftp/python/3.6.3/Python-3.6.3.tar.xz
#yum install readline-devel
# yum list installed readline
-----> 이런 결과가 나오면 성공
>> 파이썬2 소스코드 다운로드
#wget https://www.python.org/ftp/python/3.6.3/Python-3.6.3Python 3.6.3.tgz
일 경우
#xz -d Python.2.6.3.tgz
--> 한번만 압축 풀어줌
#wget https://www.python.org/ftp/python/3.6.3/Python-3.6.3.tar.xz
#xz -d Python-3.6.3.tar.xz
#tar xvf Python-3.6.3.tar.xz
-->두번 풀어주어야 함
>> 소스 설치
#cd Python3.6.3
# ./configure
-->>>error 메세지 뜨면
$개발자 도구 먼저 설치
#yum groupinstall "Development Tools"
#make
#make install
-->python3 실행되는지 확인
#python3
--<> 실행된 python은 ctrl+d 를 하면 멈춤
네트워크 (Network)
1. 물리적 네트워크 요소
- 스위치 , 라우터, ... 물리적인 연결
- 네트워크 인프라
- cisco, CCNA
2. 논리적 네트워크 요소
-프로토콜 : 출발지에서 목적지 까지 데이터를 전달하는 방법
-프로토콜이 가지고 있는 취약한 형태
-->>네트워크(프로토콜)을 이해하는 것이 수업의 목표
ex) 택배
1. 물리적 요소 (스위치나 라우터)
- 물류를 옮길 수 있는 체계가 구축(인프라)
- ex) 트럭 기사들, 집하장, 물류센터, 택배 기사
2. 논리적 요소
-ex) 물건을 포장해서 보내기 위해 필요한 것
--> 송장(논리적요소)
보내는사람, 받는사람, 송장번호, 등등
-프로토콜
>> 보안은 독립적이지 않다
- 택배 시스템 해킹 :
ex)다른 사람에게 가야할 물건을 나한테 오도록 만들고 싶다
없는 물건처럼 만들어 버리고 싶다
내용물을 훔쳐 보고 싶다
...
--> 근본적 원인 해결을 위해 택배 시스템 먼저 이해해야함
>> 보안을 위해선 네트워크의 이해가 먼저 필요
>> 보안은 항상 종속적이다
>> 폭 넓은 이해 해야 하기 때문에 시간이 오래 걸린다
-엔지니어보다 더 잘 시스템을 이해해야 됨
-개발자보다 더 언어를 잘 다뤄야 함
3. OSI 7 Layer: 네트워크 표준
- 전체 네트워크를 7개로 나눈 형태
- TCP/IP protocol suite, INTERNET 5 Layer
Layer 7 : Application Layer(응용 계층)
Layer 6 : Presentation Later(표현 계층)
Layer 5 : Session Layer(세선계층)
-->5,6 계층은 추상적인 계층으로정확하게 표현되지 않는다
==============상위 3계층=========
Layer 4 : Transport Layer(전송 계층)
Layer 3 : Network Layer (네트워크 계층)
Layer 2 : Data-link Layer(데이터 링크 계층)
Layer 1 : Physical Layer (물리 계층)
-->실제 전송을 담당하는 부분
*4계층을 이해하는 것이 매우 중요하다
(택배로 치자면 물류 시스템 운송시스템 택배기사 등등이 들어있는 부분_)
=================하위 4계층=========
>>소켓 : 모든 언어가 네트워크 프로그래밍을 하기위해선 소켓을 통해 통신을 함
>>>네트워크 프로그램
- 소켓(socket) 프로그래밍
- 서버 소켓 / 클라이언트 소켓
- 입/출력 객체
- 일반적으로 소켓 프로그래밍은 단방향 통신
--> send()와 recvfrom()을 동시에 할 수 없음
>> 입/출력
- 표준 입/출력 : input, print
#vi stdio.py
str = input("any input:")
print(str)
#python3 stdio.py
any input : hello
hello
- 파일 입/출력 : 파일 식별자(파일에 대한 객체)
-> File Descriptor(FD)
-> File Object
open('파일경로','파일을 열 방식')
readline() -> 한줄
read() -> 모든 줄
r : 읽기 w : 쓰기 a : 덧붙여쓰기
- 네트워크 입/출력
->Socket Object (소켓 객체)
-> FD의 연장선 이해
-> Client socket
-> Server socket
-->sys 모듈에 관련된 내용 참고 (python.org)
--> 파일 개수만큼 파일을 만들어야 입출력이 가능
※통신을 하고싶으면 통신을 하는 개수 만큼 만들어 줘야함
(파일에 대한 객체를 생성하는 것처럼 소켓이라는 객체를 만들어 주어야 통신이 가능 )
<<실습>>
python파일 생성
#vi file_io.py
fd = open('/etc/passwd','r') // /etc/passwd 파일을 읽어 들임 (읽기 전용)
print(fd.read())
new_fd=open('sample','w') // ./sample 파일에 복사
new_fd.write('hello,python\,')
print( input() )
import sys
print(type(sys.stdin))
print(type(sys.stdout))
tmp=sys.stdin.read()
sys.stdout.write(tmp)
1. 네트워크 구조
1) 1:1 구조 ( Peer To Peer/P2P )
-ex) torrent
-둘중 하나는 server. 다른 하나는client
2) 1:n 구조 (Server/Client)
- 가장 일반적인 구조
- tcp/udp
<tcp : 전화 / udp : 문자 >
>>인터넷(네트워크통신)을 사용하는 모든 프로그램은 TCP /UDP둘중의 하나를 사용
- 소켓을 생성 : 통신을 위한 소켓 객체를 얻어온다
##소켓을 만들떄 생각해야 하는 것
1) 어떤 아이피 표현을 사용하는 주소를 사용하는지 고려
2) UDP/TCP인지
>> 소켓타입 (type)
- UDP(SOCK_DGRAM),TCP(SOCK_STRAM)
RAW(SOCK_RAW) --> UDP TCP를 가리지 않는 모든 타입
--> 기본적으로 3가지만 우선 이해
>> 소켓패밀리
(-AF_UNIX= 잘 안씀-> UNIX 버전)
-AF_INET : IPv4를 사용하는 통신 ##수업시간에 사용하는 패밀리 버전
-AF_INET6 : IPv6를 사용하는 통신
-AF_PACKET : IP를 사용하지 않는 통신
★파이썬에서 제공하는 문자열 타입
- str, bytes, bytearray ( 아스키 )
- 파이썬의 str타입은 유니코드(2byte로 표현) - 한글도 표현 가능( 변수도)
- 그래서 python3 이후부터 한글사용 가능
- 네트워크 통신은 바이트단위(bytes)로 이루어진다.
- bytes 타입은 문자에 대한 바이트 표현
- 'string' vs b'string'
- 'string'은 유니코드로 표현된 2byte짜리 문자열
b'string' 아스키코드로 표현된 1byte문자열,
string = 'string' -> string.encode() -> b'string'
// string= b'string' -> string.decode() -> 'string'
- bytes Vs. bytearray :
변경 불가능(str,list) VS 변경 가능(tuple,int)
- 숫자를 대부분 다룸
>>type('hello') //유니코드
<class 'str'>
>>type(b'hello') // 아스키코드
<class 'bytes'>
encode() : str -> bytes
decode() : bytes -> str
'Network Security > Network' 카테고리의 다른 글
Layer 3/IPv4 (0) | 2017.12.14 |
---|---|
Layer 4/UDP 헤더 분석 (Low Socket) (0) | 2017.12.14 |
TCP socket Programming (0) | 2017.12.12 |
UDP socket Programming (0) | 2017.12.12 |
Network(Linux )시스템 구축 (0) | 2017.12.08 |