※ OSI 7 Layer( OSI 7계층 )
- 네트워크를 7개의 계층으로 분류
- 인터넷 != 웹
- TCP/IP 프로토콜 (인터넷 5계층)
Layer 7: Application Layer(응용계층)
- 웹, 온라인 게임, DHCP, DNS, ...
Layer 6: Presentation Layer(표현계층)
Layer 5: Session Layer(세션계층)
- 추상적인 계층: 암호화, SSL, ... (인터넷에서는 5,6계층이 잘 표현되지 않았다 )
----------------- 상위 3계층 ------------------
상위 3계층이 없어도 통신은 가능하다.
예). 대화
- 무중력 상태에서는 대화가 되지 않음
- 언어: 한글(상위 3계층<응용계층>) < 한글과 목소리가 상대방에게 전달되는건 별개의 문제 >
Layer 4: Transport Layer(전송계층)
- 통신하는 방법을 정의: TCP, UDP
Layer 3: Network Layer(네트워크 계층)
- 경로를 선정
- 서로 다른 네트워크간의 통신을 가능
Layer 2: Data-Link(데이터 링크 계층)
- 라우팅이 필요하지 않은 구간에서의 통신
- 신뢰도가 제일 높은 구간
Layer 1: Physical Layer(물리 계층)
- 물리적인 통신에 관한 정의
- NIC(Network Interface Card)
- 케이블, 무선(주파수)
------------------ 하위 4계층 -----------------------
- 공기라는 매개체를 이용하여 목소리(주파수)를 전달(통신)
※ 파이썬을 이용한 소켓 프로그래밍
- 네트워크 프로그래밍
- 입/출력과 같음
* 입/출력의 종류
1. 표준 입/출력: 리눅스 -> 0(stdin), 1(stdout), 2(stderr)
- C: scanf, gets, printf, ...
- java: system.out.println, scanner
- python: input, print
...
* 키보드( 표준입력장치 )로 입력 받아 모니터( 표준출력장치 )에 출력
2. 파일 입/출력
- 파일의 내용을 읽고, 파일에 내용을 쓰고
- 파일 객체를 통해서 파일과 통신 ( python의 경우 )
- 파일 객체의 타입에 따라서 통신 방법이 달라진다.
ex). 읽기 전용, 쓰기 전용, 읽고/쓰기, 추가
3. 네트워크 입/출력
- 네트워크 장치를 통해 들어오는( NIC ) 내용을 읽고
- 네트워크 장치를 통해 내용을 내보내고
- 네트워크 장치를 통해서 입/출력(통신)을 하기 위해서는 소켓이 필요하다.
* 파일 식별자 , 장치, 사용자, 프로세스 다 숫자로 구분한다.
0(stdin), 1(stdout), 2(stderr)
0번으로 지정된 장비로 입력을 받음, default => 키보드
2 > /dev/null
( stderr를 출력 재지정 문자( > )를 이용해서/dev/null로 보낸다는 의미 )
* 파일입출력 예제
python3 -i 옵션을 이용하면 실행기를 통해 파일입출력 제어가 가능하다.
fd = open( "passwd" , "r" ) r은 읽기모드로 열겠다. r,w,a(append), r+
종류에따라서 파일객체를 다양하게 생성가능
line = fd.readline()
print ( line, end='' )
fd.write("Hello, Korea")
하면 리턴값 12 출력, 몇 글자 입력했는지를 나타낸다.
* 소켓 생성
socket.socket(family, type)
family
- AF_INET --> IPv4 통신
- AF_UNIX --> unix계열에서만 사용 가능한 소켓
- AF_PACKET --> 로우(raw) 소켓
- 타입을 갖지 않는 소켓
type
- socket.SOCK_STREAM : TCP
- socket.SOCK_DGRAM : UDP
- socket.SOCK_RAW : 형태를 갖지 않는다.
※ MAC 주소 변경 방법
1. VMWare 하드웨어 네트워크 Advanced 들어가서 MAC Address Generate 버튼 클릭
( MAC 주소를 변경하면 인터페이스가 하나 더 생긴걸로 인식해서 강제적으로 맞춰줘야 한다 )
2. 리눅스 접속해서 로그인 후에 vi /etc/sysconfig/network-scripts/ifcfg-eth0 접속
DEVICE
TYPE
ONBOOT
BOOTPROTO
NAME
남기고 나머지 삭제
3. vi /etc/udev/rules.d/70-persistent-net.rules 접속
eth1 설정은 놔두고 eth0 설정 지우고 eth1을 eth0으로 바꾸고 재부팅( reboot )
'프로그래밍 > NETWORK HACKING' 카테고리의 다른 글
[네트워크 보안] 파이썬3 struct 모듈을 이용한 패킷 분석 (0) | 2017.06.17 |
---|---|
[네트워크 보안] UDP 통신 계층별 분석 (0) | 2017.06.16 |
[네트워크 보안] 파이썬 TCP 소켓 / TCP 에코 서버 & 클라이언트 (0) | 2017.06.15 |
[네트워크 보안] 파이썬 소켓 통신(UDP) / UDP 에코서버 실습 (0) | 2017.06.13 |
[네트워크 보안] CentOS6 Python3 설치 및 기본 실습 환경 구축, 보안 설정 해제 (0) | 2017.06.08 |
댓글