티스토리 뷰



>>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
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2025/07   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
글 보관함