|
|
| version 1.1.2.6, 2013/06/25 17:06:02 | version 1.2.2.2, 2013/07/01 20:46:59 |
|---|---|
| Line 61 static void * | Line 61 static void * |
| ShowPkt(void *buffer) | ShowPkt(void *buffer) |
| { | { |
| char Proto = 0, szStr[BUFSIZ], szLine[BUFSIZ], szWrk[BUFSIZ], szShow[USHRT_MAX] = { 0 }; | char Proto = 0, szStr[BUFSIZ], szLine[BUFSIZ], szWrk[BUFSIZ], szShow[USHRT_MAX] = { 0 }; |
| struct bpf_hdr *bpf = buffer; | |
| #ifdef __FreeBSD__ | #ifdef __FreeBSD__ |
| struct bpf_zbuf_header *bzh = buffer; | struct bpf_zbuf_header *bzh = buffer; |
| struct icmphdr *icmp; | struct icmphdr *icmp; |
| Line 78 ShowPkt(void *buffer) | Line 77 ShowPkt(void *buffer) |
| assert(buffer); | assert(buffer); |
| #ifdef __FreeBSD__ | eth = (struct ether_header *) buffer; |
| snprintf(szLine, BUFSIZ, "#Packet length: %d\n>>> Ethernet ...\n", flg ? bzh->bzh_kernel_len : bpf->bh_datalen); | |
| strlcat(szShow, szLine, USHRT_MAX); | |
| eth = (struct ether_header *) (buffer + (flg ? bzh->bzh_kernel_len : bpf->bh_hdrlen)); | |
| #else | |
| snprintf(szLine, BUFSIZ, "#Packet length: %d\n>>> Ethernet ...\n", bpf->bh_datalen); | |
| strlcat(szShow, szLine, USHRT_MAX); | |
| eth = (struct ether_header *) (buffer + bpf->bh_hdrlen); | |
| #endif | |
| switch (ntohs(eth->ether_type)) { | switch (ntohs(eth->ether_type)) { |
| case ETHERTYPE_ARP: | case ETHERTYPE_ARP: |
| Line 246 ShowPkt(void *buffer) | Line 237 ShowPkt(void *buffer) |
| } | } |
| printf("%s===\n", szShow); | printf("%s===\n", szShow); |
| pthread_exit(NULL); | return NULL; |
| } | } |
| // ---------------------- | // ---------------------- |
| Line 300 main(int argc, char **argv) | Line 291 main(int argc, char **argv) |
| strlcpy(szStr, *argv, sizeof szStr); | strlcpy(szStr, *argv, sizeof szStr); |
| #ifdef __FreeBSD__ | #ifdef __FreeBSD__ |
| dev = io_etherOpen(szStr, O_RDWR, 42, (u_int*) &siz, &bz); | dev = io_etherOpen(szStr, O_RDWR | O_NONBLOCK, 42, 0, (u_int*) &siz, (flg) ? &bz : NULL); |
| if (dev == -1) | if (dev == -1) |
| dev = io_etherOpen(szStr, O_RDWR, 42, (u_int*) &siz, NULL); | dev = io_etherOpen(szStr, O_RDWR | O_NONBLOCK, 42, 0, (u_int*) &siz, NULL); |
| #else | #else |
| dev = io_etherOpen(szStr, O_RDWR, 42, (u_int*) &siz, NULL); | dev = io_etherOpen(szStr, O_RDWR, 42, 0, (u_int*) &siz, NULL); |
| #endif | #endif |
| if (dev == -1) { | if (dev == -1) { |
| printf("Error:: #%d - %s\n", io_GetErrno(), io_GetError()); | printf("Error:: #%d - %s\n", io_GetErrno(), io_GetError()); |
| Line 341 main(int argc, char **argv) | Line 332 main(int argc, char **argv) |
| if (mode == 'R') { | if (mode == 'R') { |
| pfd.events = POLLIN; | pfd.events = POLLIN; |
| for (i = 0; i < count; i++) { | for (i = 0; i < count; i++) { |
| if (poll(&pfd, 1, -1) == -1) | if ((ret = poll(&pfd, 1, -1)) == -1) |
| break; | break; |
| ret = io_etherRecv(dev, buffer, siz, bz); | ret = io_etherRecv(dev, buffer, siz, bz); |
| if (!ret) | |
| continue; | |
| if (ret == -1) | if (ret == -1) |
| printf("%d) io_etherRecv(%d) #%d - %s\n", i, ret, | printf("%d) io_etherRecv(%d) #%d - %s\n", i, ret, |
| io_GetErrno(), io_GetError()); | io_GetErrno(), io_GetError()); |
| if (Verbose) { | if (Verbose) { |
| printf("%d) +readed %d bytes\n", i, ret); | printf("%d) +readed %d bytes\n", i, ret); |
| pthread_create(&tid, NULL, ShowPkt, buffer); | ShowPkt(buffer); |
| pthread_join(tid, NULL); | |
| } | } |
| } | } |
| } else { | } else { |