2011년9월26일_pcap_패킷 캡쳐 라이브러리를 사용하여 랜카드이름을 알아보자.



● pcap라이브러리

pcap의 앞에 p는 Packet을 뜻하고 cap은 Capture를 뜻한다.
말그대로 네트워크패킷을 캡쳐하여 분석할 수 있는 함수들의 집합이라고 할 수 있다.
pcap라이브러리는 운영체제에 상관없이 사용가능한 라이브러리라고 한다.


# man pcap
pcap라이브러리의 함수들을 보기 위해 pcap의 man page를 보면..

image 

헤더파일의 경로가 잘 못 되어 있다.

image image

일반적인 헤더파일을 찾는 경로는 /usr/include로 여기서 찾아 보니 없다.
하위 디렉토리 pcap에 pcap.h가 있다.
그러니 #include <pcap.h>를 #include <pcap/pcap.h>로 바꾸어야 한다.

그리고 아래에 있는 배열선언과 함수이름을 가져와 소스코드에 붙여 넣자.

char errbuf[PCAP_ERRBUF_SIZE];   
char *pcap_lookupdev(char *errbuf); 



● today_protocol/main.c

   1: #include <stdio.h>
   2: #include <pcap/pcap.h>
   3:  
   4: int main()
   5: {
   6:     char errbuf[PCAP_ERRBUF_SIZE];        //에러가 나면 여기에 기록됨.
   7:     char *cpNIC_Name;        
   8:     
   9:     cpNIC_Name = pcap_lookupdev(errbuf);
  10:     printf(cpNIC_Name);
  11:     putchar('\n');
  12:     
  13:     return 0;
  14: }


<실행결과>

image

pcap라이브러리를 사용하였으니 link옵션으로 pcap라이브러리를 링크시켜야 한다.
실행하면 ‘eth0’가 나오고 이는 ifconfig명령으로 확인이 가능하다.

image

제일 처음 나오는 문자열이 “eth0”로 이는 실제 LAN카드의 이름을 뜻하고 Ethernet의 약자이다.
아래의 “lo”는 가상의 LAN카드로 물리적인 LAN카드가 없어도 존재하고 보통 시험용으로 쓰이는 로컬루프백이다.
Link encap은 링크계층이고 HWaddr은 H/W주소로 LAN카드의 MAC주소를 말한다.

 
image 전에 배운 4계층에서 맨 아래의 계층이 되겠다.


windows의 cmd창에서도 확인할 수 있다.

> ipconfig

image 

ipconfig만 치면 자세히 나오지 않으니 /all옵션을 주어,

> ipconfig /all

image  

VMnet8과 VMnet1은 가상의 LAN카드이고 VMware Player를 설치한 사람만 보인다.
아래의 Ethernet adapter 로컬 영역 연결: 은 실제 LAN카드를 운영체제가 명명한 것이고,
LAN카드의 이름은 그 아래에 Description에 Realtek社의 RTL8139/810x Family..이다.
Physical Address는 MAC주소이고 이것이 실제 물리적인 LAN카드의 주소이고,
리눅스에서 확인한 것과 VMnet8과 VMnet1의 주소는 가상의 LAN카드의 주소이다.

MAC Address는 쉽게 설명하자면 제조사에 제품을 만들 때 기록한 그 제품의 고유번호로 사람의 주민번호와 비슷하다.
이 번호 공개해도 되는거야?


image

인터넷에서 떠도는 패킷을 pcap라이브러리를 이용해 캡쳐하여,
프로토콜을 분석하여 공부하거나 해킹을 탐지하면 좋은 사람이고,
다른 사람의 개인정보나 비밀등을 획득을 위해 캡쳐하면 나쁜 사람이 되겠다.
이런 기술을 스니퍼기술(sniffer)이라고 한다.   N-IDS  이건 뭐였지 –_-;;;