Wireshark 리눅스에서 No Interface 문제 해결하기

Wireshark는 이더넷 인터페이스 카드를 통해 드나드는 데이터들을 캡쳐할 수 있는 요긴한 프로그램이다.  나같이 프로토콜을 구현하고 테스트하고 연동하는 사람에게 이 툴은 권총처럼 옆에 항상 차고 다닌다고 보면 된다.

Wireshark이 네트워크 카드의 데이터 흐름을 캡쳐할 수 있는 이유는 드라이버 레벨에서 동작하는 모듈이 있기 때문이다.  Windows 용 Wireshark는 WinPcap 모듈을 이용하고,  리눅스에서는  dumpcap 이라는 데몬을 사용한다.

그런데 리눅스의 dumpcap은 그냥 설치하는 것 만으로는 동작하지 않는다.  네트워크 카드에서 정보를 추출하는 것은 뭔가 해킹과 같은 늬앙스를 풍기기 때문에, 리눅스에서는 권한을 부여받은 어플리케이션만 네트워크를 캡쳐할 수 있도록 제한하고 있기 때문이다. 

30장 : 오토마타(Automata)와 XML 파서

강의의 마지막입니다.  마지막을 무엇으로 할까 고민하다가 "오토마타(Automata)"를 골랐습니다. 

오토마타는 상태(State) 집합과 상태간의 전이(Transition)를 모델링한 것으로 이들이 하나의 시스템을 이루면 "유한상태 기계(Finite-State Machine)"라고 합니다.

실로 현실의 많은 것들이 이 오토마타로 표현될 수 있습니다만 가장 대표적으로 쓰이는 분야가 논리적으로 구성된 프로그래밍 언어를 해석하는 파서(Parser) 분야입니다.  현재 개발할 때 사용하는 C++, Java 등의 언어들은 더 낮은 레벨의 언어로 변환되어야 하는데,  고레벨 언어를 해석하는 역할을 오토마타가 맡고 있습니다.

이 장에서는 오토마타의 기본적인 개념을 살펴 보고, 오토마타를 활용한 예로서 XML 문서를 해석하는 XML 파서를 만들어 보도록 하겠습니다.

29장 : 알고리즘 개발 방법론 2 (Greedy Method, Backtracking)


알고리즘 개발 방법론 두번째 장으로 욕심쟁이 기법(탐욕, Greedy Method)와 백트래킹(Backtracking)에 대해서 알아봅니다.

사실 이 두가지 기법은 모든 방법을 동원해서도 풀리지 않는 문제가 있을 때, 마지막으로 시도해볼 수 있는 방법입니다.  혹은 문제의 최적화된 해법을 구하기 전에 미리 그 해답을 찾는 방법이기도 합니다.

그런 의미에서 매우 중요하고 알아두어야 할 기법입니다. 그런데 그 내용을 들여다 보면 우리가 흔히 하는 작업들에 대해 체계적으로 정리해 놓은 것에 불과하다는 생각이 듭니다.

28장 : 알고리즘 개발 방법론 1 (Divide and Conquer, Dynamic Programming)


지금까지 살펴 본 알고리즘들은 주어진 문제를 최적으로 해결하는 것들이었습니다.  우리의 선조들이 힘든 연구와 통찰을 통해 찾아낸 아름답고도 멋진 해법들입니다.

하지만 이들은 처음 접한 문제들에 대해 어떻게 해법을 찾을 수 있었을까요? 또 우리가 새로운 문제를 접하게 될 때, 참조할 만한 비슷한 연구 결과가 없다면 어떻게 해결해야 할까요?

"알고리즘 개발 방법론"이라는 소제목으로 소개시켜드리고자 하는 네가지 접근법은 바로 이렇게 특별한 최적화된 해법이 없는 문제에 대해 어떻게 접근하여 최적화된 혹은 쓸만한 해법을 찾을 수 있는지에 대한 "방법론"을 살펴볼 것입니다.

27장 : 회귀와 스플라인 (Regression & Spline)


이번 장에서 배우는 회귀(Regression)과 스플라인(Spline)은 다른 큰 학문 분야의 맛보기로 제시한 것입니다.

회귀는 통계학의 기본이 되는 개념으로, 실제 측정된 데이터로부터 일반화된 수식을 얻어내는 기법을 의미합니다.  측정된 데이터가 많을 수록 더 정확한 수식을 얻어낼 수 있으며, 이 수식을 바탕으로 미래에 일어날 사건을 예측할 수 있다는 점에서 "통계 학습(Statistical Learning)"의 출발점이라 볼 수 있습니다.

통계 학습은 요즘 뜨고 있는 빅데이터 분석과도 밀접한 관계를 가지고 있습니다.

스플라인(Spline)은 몇몇 제어점을 이용하여 부드러운 곡선을 만들어내는 수학적 도구입니다.  회귀와 비슷한 개념을 기하학적으로 바라보는 관점입니다.

26장 : 수치 미적분

미분(Differential)과 적분(Integral)의 개념이 창안되고 나서 수학의 세계는 혁명적인 변화를 경험하게 됩니다.

현재 상태만을 주시하던 인간들은 상태의 변화를 볼 수 있게 되었고, 더 나아가 상태 변화의 변화까지 볼 수 있게 되었습니다.  비유하자면 심봉사가 눈을 뜬 것과도 같은 인식의 지평이 열린 대 사건입니다.

대학에 들어가서 배우게 되는 거의 모든 분야의 공학, 수학, 자연과학, 경제학 등에서 미분과 적분이 기본적인 도구로 사용됩니다.  이것의 이해를 하지 않고서는 한치도 앞으로 나갈 수 없습니다.

25장 : 방정식 근 찾기

학창시절 수학 공부하면서 지겹도록 방정식을 풀어 보았을 겁니다.

그런데 아십니까? 우리가 손으로 풀던 문제들은, 딱 손으로 풀 수 있는 정도의 계산량만 요구하는 "연습용" 문제일 뿐이라는 걸요.

실제 현실에서 부닥치는 여러가지 문제들을 방정식으로 모델링하고 이를 풀려고 하면 절대로 손으로 (혹은 대수적으로) 풀 수 없는 경우가 태반입니다.

객관식 문제라면 보기 몇개를 거꾸로 대입시켜 해결할 수 있을 것입니다만... 현실은 주관식이어서  대입해야 할 수는 거의 무한대에 가깝습니다.  이럴 때 필요한 것이 초당 몇백만 번을 계산할 수 있는 컴퓨터의 계산 능력입니다.

인기글