:::: MENU ::::
Posts tagged with: wireshark

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

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



Wake on LAN

Wake on LAN은 네트워크 패킷(매직 패킷)으로 컴퓨터를 켜거나, 깨우는 기능을 하는 AMD와 HP에서 만든 표준이다.

요즘 PC들은 전원을 꺼도 이더넷 잭에 연결된 LED가 깜박이는 것을 볼 수 있는데, 즉 LAN은 패킷을 받을 수 있는 모드에 있다. 

AMD의 White paper

cfile26.uf.1225CD3F5022E8BF13F2F0.pdf

매직 패킷의 구성

매직 패킷은 2가 있는데, ether-wakeUDP상에서 구현하는 패킷이 있다. 대부분의 PC 프로그램이 보내는 패킷은 후자이다.

아래 내용은 ether-wake패킷의 구성이다. 출처) http://wiki.wireshark.org/WakeOnLAN

이 사이트에서 관련 패킷 샘플도 다운로드 가능하다.

Synchronization Stream

Target MAC

Password (optional)

6

96

0, 4 or 6

-. Synchronization Stream : FF FF FF FF FF FF

-. Target MAC: 깨울 상대의 맥 어드레스

-. Password: 옵션

즉 옵션이 없고 맥 어드레스가 01:02:03:04:05:06 이면 패킷의 형태는 다음과 같다.

FFFFFFFFFFFF010203040506010203040506010203040506010203040506 010203040506010203040506010203040506010203040506010203040506 010203040506010203040506010203040506010203040506010203040506 010203040506010203040506



아래 첨부 파일은 매직 패킷을 Wireshark로 캡쳐한 것이다.[출처: Wireshark.org]

Ether-wake와 UDP 패킷 2가지가 나와있다.

cfile26.uf.125CBA4350259BC91C8AB5.pcap


매직 패킷을 보낼 수 있는 프로그램

Fusion WOL

http://fusionfenix.com/product/wol-1-0

찾아보면 이것말고 꽤 있다.

W5200의 WOL 기능

-. Wake On LAN과 Power down mode와는 아무 관련이 없다. 그리고 power down mode를 enable하면 패킷을 못 받는다.

-. 즉 WOL은 MCU가 sleep하고 있고, W5200은 동작하고 있는 상태에서 WOL기능을 이용해서 매직 패킷을 받으면 인터랍트가 떠서 MCU 깨울때 사용하면 다.

-. 단 주의 사항은 W5200은 ether-wake 패킷만 지원을 한다. 

   따라서 PC에서 raw Ethernet Packet을 보낼 수 있는 프로그램이 필요하다.

참고

http://en.wikipedia.org/wiki/Wake-on-LAN

http://wiki.wireshark.org/WakeOnLAN

http://support.amd.com/us/Embedded_TechDocs/20213.pdf


임베디드 보드에서 트위터하기

이 블로그 포스트는 Twitter API Proxy 서비스인 supertweet.net를 이용해서 PC나 스마트폰이 아닌 임베디드 보드에서 트위터 메시지를 보내는 방법을 설명한다.
참조 사이트:mbed의 post to Twitter via SuperTweet 

먼저 트위터 아이디가 필요한데, 테스트를 위해 twitter.com 에서 ID를 하나 만들었다. EspressoDopio2. 참고로 내 트위터 아이디는 EspressoDopio

Supertweet.net 에 접속해서 docoment link에 가면 3가지 step으로 설명을 해 놓고 있다.
1. Sign UP/ Sign in now를 클릭해서 MyAuthAPIProxy가 계정 사용을 승인하도록 한다.
2. Basic Auth를 위한 패스워드를 설정한다. 이 password는 패스워드와 다르게 설정함.
이 설정이 되면 다음과 같이 Username이 나타다고 Secret 밑에 Show 를 클릭하면 내가 정한 password가 나타난다.


3. 이젠 임베디드 보드에서 트위터 메시지를 보내면 되는데, Twitter.com 대신에  http://api.supertweet.net 로 보내면 된다.
구체적인 방법은 http://www.supertweet.net/about/api 링크를 확인하면 되는데, 간단히 메시지 post하는 것을 설명하면…

 아래 예제는 curl를 사용해서 메세지를 보내는데, user:password는 위 테이블의 Username 즉 트위터 아이디가 되겠고, password는 Supertweet에서 설정한 password이다. 트위터 메시지는 “playing with cURL and the SuperTweet.net API” 이게 되겠다.

curl -u user:password -d “status=playing with cURL and the SuperTweet.net API” http://api.supertweet.net/1/statuses/update.xml
참고) cURL은 http://curl.haxx.se/ 에서 다운로드 가능. 윈도우 버젼도 있다.

실제 트위터에 메시지가 올라간 경우.


Wireshark로 실제 날라가는 패킷을 잡아보면 다음과 같다.

빨간색이 보낸 패킷이고 파란색이 받은 패킷이다.
보낸 패킷에서 2번째 줄이 Authorization인데, Basic 뒷 부분은 “Username:password” 가 base64로 인코딩되어 있고, 보낸 패킷의 마지막 부분의 status= 뒷부분이 보낸 메시지 이다.

따라서 임베디드 보드에서 이것을 구현을 하려면,
-. DNS: api.supertweet.net에 접속을 위해
-. HTTP Client
-. Base64 encoding 함수등이 구현이 되야 겠다.

구체적인 구현 결과물은 다음 기회에……



네트워크 패킷 생성기 (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의 경우도 마찬가지…