Rolf Meyer
/
ethersniff_hex
A simple example how to receive ethernet packages and display them over stdout with an hexviewer
main.cpp@0:2f61a610595e, 2009-12-09 (annotated)
- Committer:
- rolf
- Date:
- Wed Dec 09 11:36:29 2009 +0000
- Revision:
- 0:2f61a610595e
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
rolf | 0:2f61a610595e | 1 | /* mbed Ethernet class demo |
rolf | 0:2f61a610595e | 2 | * Copyright (c) 2009 rmeyer |
rolf | 0:2f61a610595e | 3 | * Released under the MIT License: http://mbed.org/license/mit |
rolf | 0:2f61a610595e | 4 | */ |
rolf | 0:2f61a610595e | 5 | |
rolf | 0:2f61a610595e | 6 | #include "mbed.h" |
rolf | 0:2f61a610595e | 7 | #include "hexview.h" |
rolf | 0:2f61a610595e | 8 | |
rolf | 0:2f61a610595e | 9 | DigitalOut led(LED4); |
rolf | 0:2f61a610595e | 10 | Ethernet eth; |
rolf | 0:2f61a610595e | 11 | |
rolf | 0:2f61a610595e | 12 | unsigned short htons(unsigned short n) { // Host short to network shor |
rolf | 0:2f61a610595e | 13 | return ((n & 0xff) << 8) | ((n & 0xff00) >> 8); // Byte swapping |
rolf | 0:2f61a610595e | 14 | } |
rolf | 0:2f61a610595e | 15 | |
rolf | 0:2f61a610595e | 16 | void show(char *buf, int size) { |
rolf | 0:2f61a610595e | 17 | printf("ETH: Src: %02hX:%02hX:%02hX:%02hX:%02hX:%02hX ", |
rolf | 0:2f61a610595e | 18 | buf[6], buf[7], buf[8], buf[9], buf[10], buf[11]); |
rolf | 0:2f61a610595e | 19 | printf("Dst: %02hX:%02hX:%02hX:%02hX:%02hX:%02hX ", |
rolf | 0:2f61a610595e | 20 | buf[0], buf[1], buf[2], buf[3], buf[4], buf[5]); |
rolf | 0:2f61a610595e | 21 | |
rolf | 0:2f61a610595e | 22 | unsigned int type = (buf[12] << 8) | (buf[13]); |
rolf | 0:2f61a610595e | 23 | printf("Type: %hd\n", htons( type)); |
rolf | 0:2f61a610595e | 24 | |
rolf | 0:2f61a610595e | 25 | hexview2(buf, size); |
rolf | 0:2f61a610595e | 26 | } |
rolf | 0:2f61a610595e | 27 | |
rolf | 0:2f61a610595e | 28 | |
rolf | 0:2f61a610595e | 29 | int main() { |
rolf | 0:2f61a610595e | 30 | char buffer[0x300]; |
rolf | 0:2f61a610595e | 31 | int size = 0; |
rolf | 0:2f61a610595e | 32 | |
rolf | 0:2f61a610595e | 33 | while(1) { |
rolf | 0:2f61a610595e | 34 | if((size = eth.receive()) != 0) { |
rolf | 0:2f61a610595e | 35 | eth.read(buffer, size); |
rolf | 0:2f61a610595e | 36 | show(buffer, size); |
rolf | 0:2f61a610595e | 37 | } |
rolf | 0:2f61a610595e | 38 | |
rolf | 0:2f61a610595e | 39 | led = !led; |
rolf | 0:2f61a610595e | 40 | wait(0.2); |
rolf | 0:2f61a610595e | 41 | } |
rolf | 0:2f61a610595e | 42 | } |