메뉴 건너뛰기

네트워크


* Windows Network Driver는 NDIS Spec에 맞추어서 만들어지며 모든 구체적인 처리는 NDIS가 처리하므로 드라이버를 통해 간단히 감시하기는 힘듬. DDK문서에 나와있는 NDIS Spec에 따라 Protocol Driver와NIC MINIPORT Driver중간에 위치하는 Intermediate Driver를
작성해서 모니터링하는 방법이 가장 정석적인 방법.

* Packet Monitoring
일반적으로 네트워크 인터페이스 카드는 자신에게 오거나 Broadcast 되는 패킷만을 커널로 올려주고, 커널은 이러한 패킷만을 받아서 프로토콜 스택을 구현한다. 따라서, 네트워크의 모든 패킷을 모니터링하기 위해서는 네트워크인터페이스카드를 Promiscuous 모드로 열어서 모든 패킷을 받아 볼 수 있어야 한다.

- Promiscuous 모드

*UNIX 환경에서의 패킷 캡쳐
Mike Accetta와 Rick Rashid가 1980년에 Enet Packet Filter를 만들고 이것이 발전하여 여러 UNIX 기반의 시스템에서 각각의 형태로 발전을 했다. 다음은 UNIX 기반의 시스템 별로 사용 가능한 패킷 캡쳐와 필터링 모듈이다. BSD-derived kernels는 BSD Packet Filter(BPF)를 제공한다. SunOS에서는 Network Interface Tap(NIT) 라는 STREAMS pseudo-device driver가 제공된다. SystemV R4와 Solaris는 OSI Reference Model의 Data Link의 수준의 streams를 구현한 것인 Data Link Provider Interface(DLPI)를 제공한다. 그리고, Packet Capturing Library인 libpcap은 시스템에 구애받지 않고 사용자 레벨에서 패킷을 잡을 수 있도록 프로그래밍할 수 있게 해준다.

*Windows에서의 패킷 캡쳐
먼저 Windows의 환경에서의 네트워크 인터페이스 카드로부터 패킷을 받는 것은 UNIX 시스템과 차이가 있다. Windows는 네트워크 드라이버 인테페이스 사양(Network Driver Interface Specification, NDIS)이라고 불리는 인터페이스와 환경을 제공한다. 즉, 네트워크 제조사는 윈도우만을 위한 전송 드라이버를 작성하는 대신에, 단일 네트워크 드라이버의 최상층으로서 NDIS 인터페이스를 제공한다. 이렇게 함으로써 어떤 프로토콜 드라이버도 이 인터페이스를 호출하여 자신의 네트워크 요구를 네트워크 카드로 지시할 수 있다. 이는 네트워크 드라이버를 다양한 전송 프로토콜의 세부 구조로부터 보호하며, 그 반대로 여러 프로토콜을 네트워크 드라이브로부터 보호하는 역할도 한다. 사용자 정의의 네트워크 드라이버는 Windows의 Kernel Mode에서 돌아갈 수 있도록 작성하면 된다. 이것은 Windows NT에서는 .sys의 확장자를 가진 디바이스 드라이버가 되고, Windows 95에서는 .vxd의 확장자를 가진 Virtual Device Driver이다. 그리고 이 디바이스 드라이버에서 네트워크 카드와 커널이 제공하는 적절한 NDIS API를 호출함으로서 그 디바이스 드라이버를 여는 어플리케이션은 네트워크 상의 모든 Packet을 받아 들일 수 있다.

*동적 패킷 필터 : Dynamic Packet Filter(DPF)
패킷 필터에서의 두 가지 목표는 flexibility와 performance이다. flexibility는 packet filtering device가 실행 되고 있는 중에 쉽게 패킷 필터를 추가하거나 삭제를 하여 새로운 필터를 동적으로 설정할 수 있는 것을 말하며, performance는 패킷을 필터링해서 신속하고, system의 자원을 낭비하지 않으면서 필요한 어플리케이션에 올려줄 수 있는 능력을 말한다. 하지만, flexibility와 performance는 양립하기 어려운 개념이다. 먼저 performance를 강조하여 packet filtering device의 실행 코드내에 직접 들어가게 되면, 다른 demultiplexing의 정책을 적용하기위해서는 그 실행 코드는 다시 컴파일되어 커널에 인스톨되어야 한다. 이것은 flexibility가 없어짐을 뜻한다. 반대로 flexibility를 강조하게 되면, 패킷 필터의 정보가 동적으로 변경이 되는 것을 지원해야 하기 때문에 실행 코드 내에 기계어로 번역되어서 필터의 규칙이 들어갈 수 없다. 따라서 device는 각각의 패킷에 대하여 패킷 필터의 정보를 참조하여 번역을 하고, 그 번역한 정보를 가지고 비교를 해야 하므로 performance를 희생할 수 밖에 없다. 현재까지 구현되어있는 packet filter의 이러한 한계를 극복하기 위해서 DPF는 Dynamic Code Generation(DCG)으로 만들어지는 Packet-filter language를 이용하여 flexibility와 performance를 동시에 달성할 수 있다. kernel에 DPF device가 추가되면 나머지 demultiplexing을 위한 Packet filter는 필요한 application이 실행 시에 동적으로 compile하여 DPF device에 추가를 시키면 된다.

1999.05 N/A Team.

profile
제목 날짜
CDMA 2대를 이용해서 PLC와 서버간 송수신 1 2010.07.16
[VB]비베에서 FTP로 파일 보내는 코딩 2001.08.07
웹으로 시리얼 포트 제어 두번째 관련 1 2006.06.25
프린터 포트 1 2003.06.03
SerialToNet 소스 질문이요 1 2002.10.19
서버 다중접속에 관하여... 1 2002.08.27
[VB]비베에서 FTP로 파일 보내는 코딩 2001.08.07
건우씨야... 1 2001.02.13
네트워크 환경에서... 1 2000.09.19
Packet Monitoring ii 2000.05.02
인터넷으로 모터를 돌리기 위한 실마리^^ 2000.05.28
NDIS-Packet Monitoring 방법 2000.03.07
Network Analyzer 기능&용도 1999.10.25
사찰 전산화 관련 질문에 대한 답변 1999.06.06
S/W 상으로 구현된 NA. 1999.06.06
VPN에 대해서 알고 시포욧... 1 1999.06.05
Network Analyzer Team. 1999.06.05
태그 목록
위로