:::: MENU ::::
Posts tagged with: 와이어샤크

MAC OSX에서 Wireshark를 사용한 무선랜 데이터 캡쳐

Wireshark wiki에 monitor mode에 대한 설명이 나온다. 그런데 airport를 사용하는 내용이라서 별 의미가 없다. Wireshark에서 무선랜 데이터를 캡쳐하려면 monitor mode를 enable해야 하는데, 이 옵션은 윈도우즈를 오른쪽으로 많이 드래그를 해야 옵션을 찾을 수 있다. 그리고 link-layer를 802.11로 변경은 그냥 프로그램을 재실행하면 된다.


네트워크 패킷 생성기 (NPG: Network Packet Generator)

요즘은 제가 필요한 것을 인터넷에서 찾으면 다 있네요. 누군가는 같은 고민을하고 고맙게도 만들었다는 사실… ^^


NPG는 Winpcap을 사용하여 패킷을 보낼수 있는 윈도우즈 기반의 네트워크 패킷 생성기입니다. 즉 따로 프로그래밍을 하지 않고 원하는 패킷을 만들어서 보낼 수 있는 툴입니다. 사용법도 간단하고 옵션도 많지 않기 때문에 바로 사용이 가능합니다. GPL 라이센스이므로 자유롭게 사용이 가능하네요.
http://www.wikistc.org/wiki/Network_packet_generator 에 자세한 설명이 나와있고, 설치 파일은 이 페이지의 제일 아래보시면 다운받으실 수 있습니다.

사용법

  • npg
  • npg [-?hlw]
  • npg [-vvvw] -fF <packet file name> -d <device interface>
  • npg [-rtvvv] -p <packet byte stream> -d <device interface>


NPG 프로그램을 다운받고 커맨드 창에서 아무런 옵션 없이 실행을 하면, 옵션을 물어보는데 대부분의 경우 옵션을 정하고, 보낼 패킷도 저장을해서 배치파일을 만들어서 테스트를 하는 것이 가장 손쉬운 방법입니다.

옵션

-h 도움말 표시
-d 패킷을 보낼 네트워크 디바이스를 선택
-f  패킷파일의 이름 지정
-F Libpcap 호환 패킷파일 이름 지정
-l 사용 가능한 네트워크 디바이스 나열
-p <packet byte stream> 인젝트할 패킷 바이트를 HEX 값으로 나열해주면 됨
-r <repeat count>  패킷을 몇번 반복할지 카운트를 지정
-t <interval> 패킷을 인젝트 하기 전 시간 간격을 지정 (시간 기준은 밀리세컨드)
-v, -vv, -vvv 동작 상태를 표시함 v 가 많을 수록 세부정보를 표시함

실제로 보낼 데이터 파일을 가지고 설명을 하겠습니다.
아래 패킷 샘플은 ARP request를 하는 샘플입니다.

# Generic example packets to demonstrate npg.exe 
# Current documentation an examples located @ http://www.wikistc.org/wiki/Network_packet_generator

# TCP/IP ARP Request
[3, 1000] # 1000 밀리, 3 번 반복
<ARP Request>
{
# Ethernet2 Header ———

 FF FF FF FF FF FF # Destination MAC
 00 08 DC 01 01 12 # Source MAC
 08 06             # Protocol ; ARP

# ARP Header —————

 00 01             # Hardware type
 08 00             # Protocol type
 06                # Hardware size
 04                # Protocol size
 00 01             # Opcode : Request
 00 08 DC 01 01 12 # Sender MAC address
 c0 a8 0b c8       # Send IP
 00 00 00 00 00 00 # Target MAC address
 c0 a8 0b 64       # Target IP

# Ethernet2 (Trailer) ——

 00 00 00 00 00 00 # Trailer data
 00 00 00 00 00 00 
 00 00 00 00 00 00
}


#  : 주석

[] : 패킷을 보낼 횟수 및 주기를 설정
<> : 어떤 패킷인지 나타내는 태크. 큰 의미는 없다.
{} : 실제로 보낼 패킷을 HEX값으로 적는다. 위 예에서와 같이 각각의 의미를 주석으로 표시하면 알아보기 쉽다.

위와 같이 파일을 만들고 
npg -vv -f arp_request2.txt를 입력하면 NPG 프로그램은 만든 패킷을 분석을 하고 이상이 없을 시 어떤 네트워크 디바이스를 써서 보낼지 물어봅니다. 선택을 숫자로 하면 패킷이 나갑니다.
위 예에서는 패킷을 3번 1000밀리 주기로 보내는 옵션이므로 실제 패킷은 최초에 한번 나가고 추가적으로 1초 간격으로 패킷이 3개 더 나갑니다.








Wireshark Header Checksum Error

와이어샤크를 사용해서 패킷을 잡다보면 패킷에 “Header Checksum Error“라고 표시가 되어 있는 것을 볼 수 있다. 그리고 친절하게도 어떤값이 되어야 한다고 알려주기까지 한다.



체크섬이라는 것은 일반적으로 통신중에 데이터가 깨질수 도있기 때문에 삽입을 해서 데이터가 깨졌는지 여부를 확인을 한다. 
IP 헤더의 경우를 보면 2 바이트로 구성되어 있고, 네트워크를 이동하는 각 홉에서(예를 들면, 라우터 통과시) 체크섬을 검증한다. 그리고 체크섬이 올바르지 않으면 네트워크 장비는 해당 패킷을 버리며, 체크섬은 재 계산되고 업데이트를 하게된다.

그럼 어떻게 헤더체크섬이 틀린 패킷을 보내고 받을 수 있지??
원인은 여러가지가 있을 수 있는데 UDP의 경우는 체크섬 값이 제로로 채워져 있는 경우는 보내는 측 쪽에서 계산되지 않는 경우라 정의하고 있다. (RFC 768)  그리고 네트워크 장비나 기타 원인에 의해 헤더 체크섬 값이 계산되지 않았거나 또는 의도적으로 빠지는 경우도 있다.

와이어샤크에서 패킷 분석시 이게 거슬리면 다음과 같이 와이어샤크의 옵션에서 설정을 바꾸면 된다.
Edit > Preferences.. > 좌측 맨 하단의 Protocols를 선택후 UDP를 선택 > Validate the UDP checksum if possible 옵션을 해제한다.

TCP의 경우도 마찬가지…