책 소개
소스 파일은 아래 깃허브 페이지에서 내려 받으실 수 있습니다.
(https://github.com/AcornPublishing/backbox-python)
요약
TCP/IP 프로토콜에 대한 이해와 그것을 필요에 따라 수정할 수 있는 소켓 프로그래밍 지식은 해커의 필수 소양 중 하나다. 이 책은 이러한 사실을 기반으로 진지한 해커로 성장하고자 하는 사람들에게 가장 필요한 소켓 분석과 프로그래밍 지식을 전달하기 위해 집필됐다.
추천의 글
처음 원고 검토를 부탁받았을 때 ‘언제나 지식의 비관주의에 빠져 살던 내가 과연 원고를 검토할 만큼의 실력일까’라는 의문이 들었습니다. 그래서 입문자의 눈으로 원고를 검토하기로 마음 먹었습니다. 즉, 나 자신도 파이썬에 대해 백지 상태라는 기분으로 한 장씩 원고를 읽어 나갔습니다. 원고를 다 읽고 난 뒤 사이버 보안이나 소켓 개발로 입문하고자 하는 사람들이 한 번씩은 꼭 읽어야 할 필요가 있는 책이라고 결론을 내렸습니다.
칼리와 마찬가지로 모의 침투를 위한 백박스 위에서 파이썬을 이용해 소켓 개발을 한다고 하면 엄청난 지식이 필요하다고 생각하겠지만, 이 책 한 권만으로도 무난하게 진행할 수 있습니다. 이 책에서는 파이썬에 대한 기초적인 이론이나 문법, 자료 구조, TCP/IP 이론 등을 하나씩 짚어 가며 설명합니다. 또한, 기초적인 지식이 부족하더라도 구축 환경 구성부터 시작한다면 별다른 어려움 없이 이 책의 내용을 소화할 수 있을 것이라고 생각합니다.
파이썬은 각종 분야에서 폭넓게 사용 가능한 언어입니다. 또한 해커들이 자신의 생각을 표현하는 언어이자 문자이기도 합니다. 이 책을 통해 좀 더 많은 사람들이 진정한 해커로 거듭 성장해 자신의 생각을 파이썬이란 탁월한 언어로 표현할 수 있었으면 좋겠습니다.
- 최정용 / LG 전자 HE 연구소 WebOS TV 개발자
이 책의 특징
■ 파이썬 입문자를 고려해 파이썬 기본 문법을 간결한 예제 중심으로 설명
■ TCP/IP 프로토콜 입문자를 위한 TCP/IP 프로토콜의 핵심 내용 소개
■ 일반 운영 체제가 아닌 모의 침투 운영 체제를 기반으로 소켓을 소개함으로써 침투 도구에 대한 응용 동기 부여
이 책의 대상 독자
■ TCP/IP 프로토콜에 대한 이해를 기반으로 소켓 프로그래밍을 시작하고자 하는 사람
■ 파이썬을 이용해 프로그래밍 지식을 학습하고자 하는 사람
■ 소켓 개발을 시작하면서 소켓 기본 개념을 학습하고자 하는 사람
이 책의 구성
1장, ‘파이썬과 실습 환경 구축’에서는 객체 지향 기반인 범용성 스크립트 언어로서 파이썬의 강점을 설명하고 파이썬 설치 사이트를 소개한다. 파이썬이 처리하는 주요한 데이터 타입의 종류와 객체로서 데이터의 특징을 설명한다. 또한, 파이썬 실습 환경인 백박스 리눅스 개요 설명과 함께 대화식 모드에서의 파이썬 실습 방법을 알아본다.
2장, ‘숫자 데이터 종류와 각종 연산자’에서는 파이썬에서 처리하는 숫자 데이터 종류와 각종 연산자를 설명한다. 특히, 비트 연산자는 소켓 등에서 자주 사용하는 연산자이므로, 확실히 배워두어야 한다. 또한, 내장 함수 중 type() 함수와 divmod() 함수를 설명하고, bin() 함수와 oct() 함수와 hex() 함수 등을 통해 타입 변경에 대한 예제를 살펴본다.
3장, ‘문자열 특징’에서는 시퀀스 데이터 타입의 개념과 속성, 그리고 시퀀스 데이터 타입에서 사용하는 아이템과 인덱스 개념을 다룬다. 시퀀스 데이터 타입의 속성에 따라 문자열의 전반적인 특징을 알아보고, 내장 함수인 str() 함수와 int() 함수 등과 객체 및 참조 변수에 대한 구체적인 예제를 살펴본다.
4장, ‘리스트 특징’에서는 문자열과 리스트의 차이점을 알아보고 시퀀스 데이터 타입의 속성에 따른 리스트의 전반적인 특징을 살펴본다. 또한, 리스트 고유의 내장 함수를 설명하고, 리스트 등과 밀접한 range() 함수와 xrange() 함수의 차이도 살펴본다.
5장, ‘튜플 특징’에서는 리스트와 튜플의 차이점을 알아보고 시퀀스 데이터 타입의 속성에 따른 튜플의 전반적인 특징을 살펴본다. 또한, list() 함수와 tuple() 함수를 이용한 리스트와 튜플 사이의 상호 타입 변경과 그밖에 패킹과 언패킹의 개념, 그에 따른 다중 할당도 설명한다.
6장, ‘해시 특징’에서는 리스트와 해시의 차이점을 설명하고 매핑 타입으로서 해시의 전반적인 특징을 설명한다. 또한, 리스트와 해시와 퓨플의 핵심적인 차이점도 알아본다.
7장, ‘제어문의 종류’에서는 제어문과 들여쓰기의 개념, 조건문 및 반복문 개념에 대한 예제를 살펴본다. 특히, 반복 횟수가 있는 for 문과 반복 횟수가 없는 while 문의 차이점을 알아본다. 그밖에도 반복문에서 사용하는 break 문과 continue 문의 예제도 살펴본다.
8장, ‘함수에 대한 이해’에서는 함수 개념과 형식, 그리고 함수 호출을 알아보고, 사용자 정의 함수에 대한 예제로 파이썬 함수의 전반적인 특징을 설명한다. 함수의 특징 중에서도 특히 기본 인자에 대한 내용이 가장 중요하다.
9장, ‘모듈에 대한 이해’에서는 예제를 통해 파일과 모듈의 차이점을 알아보고, 모듈을 임포트하는 다양한 방법을 살펴본다.
10장, ‘클래스에 대한 이해’에서는 클래스와 그에 따른 멤버 및 메소드에 대해 설명한다. 초기화 메소드와 정적 메소드, 클래스 메소드 등과 같은 특수한 메소드 개념 및 코드 재사용성을 극대화시킨 상속의 개념을 알아본다. 또한, 상속에 따른 다형성과 오버라이딩 기능도 알아본다.
11장, ‘파일 및 예외 처리’에서는 파일 생성 과정과 예외 처리의 개념을 살펴본다.
12장, ‘TCP/IP 프로토콜에 대한 이해’에서는 TCP/IP에 대한 핵심적인 내용을 다룬다. getservbyname() 메소드와 getservbyport() 메소드를 통해 포트 번호 출력 등을 살펴보고, gethostbyname() 메소드와 gethostbyname_ex() 메소드를 통해 IP주소 출력 등을 살펴본다. 또한, pack() 메소드와 unpack() 메소드 등을 통해 비트 변경과 관련한 내용을 알아본다.
13장, ‘송신 과정에서 일련의 데이터 전송 단위’에서는 웹 브라우저에서 웹 서버로 접속하기까지 일련의 과정을 데이터 전송 단위 차원에서 세부적으로 알아본다. 또한, ICMP 요청 과정에서 생성하는 ICMP 전송 단위도 살펴본다.
14장, ‘주요 헤더의 구조와 항목’에서는 소켓 생성 측면에서 주요한 헤더의 구조와 항목의 길이를 알아본다. 헤더의 항목을 참조 변수로 설정할 때 파이썬 데이터 타입에 부합하도록 고려해야 할 내용도 함께 살펴본다.
15장, ‘소켓 관련 주요 모듈의 이해’에서는 소켓 개념과 socket 모듈, struct 모듈, scapy 모듈의 주요한 내용을 알아본다. 특히, 스카피 도구를 통해 패킷 생성 방법 등도 살펴본다.
16장, ‘UDP 기반의 서버와 클라이언트’에서는 자동식 소켓 생성 방식에 따라 UDP 기반의 서버와 클라이언트를 구현해 각각의 특징을 알아본다.
17장, ‘TCP 기반의 서버와 클라이언트’에서는 자동식 소켓 생성 방식에 따라 TCP 기반의 서버와 클라이언트를 구현해 각각의 특징을 알아본다.
18장, ‘상위 계층 기반의 로우 소켓 생성’에서는 상위 계층 기반의 로우 소켓을 생성하기 위한 기초 개념을 알아본다.
19장, ‘하위 계층 기반의 로우 소켓 생성’에서는 하위 계층 기반의 로우 소켓을 생성하기 위한 기초 개념을 알아본다.
20장, ‘ARP 스푸핑 공격 도구’에서는 하위 계층 기반의 로우 소켓을 생성하면서 바인딩하는 경우를 알아본다.
목차
목차
- 01장 파이썬과 실습 환경 구축
- 1.1 입문자와 전문가 모두를 위한 파이썬 소개
- 1.2 모의 침투 운영체제로서 백박스 소개
- 02장 숫자 데이터 종류와 각종 연산자
- 03장 문자열 특징
- 04장 리스트 특징
- 05장 튜플 특징
- 06장 해시 특징
- 07장 제어문의 종류
- 7.1 조건문
- 7.2 반복문
- 08장 함수에 대한 이해
- 09장 모듈에 대한 이해
- 10장 클래스에 대한 이해
- 11장 파일 및 예외 처리
- 12장 TCP/IP 프로토콜에 대한 이해
- 13장 송신 과정에서 일련의 데이터 전송 단위
- 14장 주요 헤더의 구조와 항목
- 15장 소켓 관련 주요 모듈의 이해
- 16장 UDP 기반의 서버와 클라이언트
- 17장 TCP 기반의 서버와 클라이언트
- 18장 상위 계층 기반의 로우 소켓 생성
- 19장 하위 계층 기반의 로우 소켓 생성
- 20장 ARP 스푸핑 공격 도구
- 부록 A SocketServer 모듈을 이용한 서버 구현
- 부록 B nmap 모듈을 이용한 포트 스캔
도서 오류 신고
정오표
정오표
2016. 10. 6 수정 사항
[p.73: 2행]
열쇠(Key)와 값(Value)으로
->
키(Key)와 값(Value)으로
[p.75: 13행]
해시 아이템을 추가는 예제 6.3과 같다.
->
해시 아이템을 추가하기 위해서는 예제 6.3를 참고하자.
[p.80: 11행]
If 문부터 콜론까지를 헤더(Header)라고 부른다.
->
if 문부터 콜론까지를 헤더(Header)라고 부른다.
[p.85: 14행]
range() 함수가 아닌 리스트 데이터 또는 튜플 등을 적용할 수도 있다.
->
range() 함수가 아닌 리스트 또는 튜플 등을 적용할 수도 있다.
[p.93: 2행]
예제 8.9를 통해 구체적인 일례를 확인해 보자.
->
예제 8.5를 통해 구체적인 일례를 확인해 보자.
[p.113: 1행]
@classmethod라는 장식자를 이용해 work()가 정적 메소드임을 명시한다.
->
@classmethod라는 장식자를 이용해 work()가 클래스 메소드임을 명시한다.
2016. 10. 26 수정 사항
[p.113: 10~13행]
일반 메소드는 예제 10.2와 같이 첫 번째 매개변수 self를 통해 인스턴스 객체 man 또는 woman 등을 받지만 클래스 메소드에서는 첫 번째 매개변수로 클래스 객체를 받는다. 클래스 메소드를 호출하면 첫 번째 매개변수에 해당 클래스 객체가 자동으로 전해진다.
->
일반 메소드는 예제 10-2와 같이 첫 번째 매개 변수 self를 통해 인스턴스 객체 man 또는 woman 등을 받지만 "정적 메소드"에서는 첫 번째 매개 변수로 클래스 객체를 받는다. "정적 메소드"를 호출하면 첫 번째 매개 변수에 해당 클래스 객체가 자동으로 전해진다.
2016. 10. 31 수정 사항
[p.188: 3행]
또한, address[0]
에는 출발지 IP 주소가 담겼고 str(address[1]
)에는 출발지 IP 주소가 담겼다.
->
또한, address[0]
에는 출발지 IP 주소가 담겼고 str(address[1]
)에는 "출발지 포트 번호"가 담겼다.
2017. 1. 10 수정 사항
[p.189: 예제 16-4]
서버가 재송신한 문자열을 수신하겠다는 설정이다.
root@backbox:/tmp# python udpclient.py
->
서버가 재송신한 문자열을 수신하겠다는 설정이다.
s.close()
root@backbox:/tmp# python udpclient.py