| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263 |
- /* include open_pcap */
- #include "udpcksum.h"## 1 ##src/udpcksum/pcap.c##
- #define CMD "udp and src host %s and src port %d"## 2 ##src/udpcksum/pcap.c##
- void## 3 ##src/udpcksum/pcap.c##
- open_pcap(void)## 4 ##src/udpcksum/pcap.c##
- {## 5 ##src/udpcksum/pcap.c##
- uint32_t localnet, netmask;## 6 ##src/udpcksum/pcap.c##
- char cmd[MAXLINE], errbuf[PCAP_ERRBUF_SIZE],## 7 ##src/udpcksum/pcap.c##
- str1[INET_ADDRSTRLEN], str2[INET_ADDRSTRLEN];## 8 ##src/udpcksum/pcap.c##
- struct bpf_program fcode;## 9 ##src/udpcksum/pcap.c##
- if (device == NULL) {## 10 ##src/udpcksum/pcap.c##
- if ((device = pcap_lookupdev(errbuf)) == NULL)## 11 ##src/udpcksum/pcap.c##
- err_quit("pcap_lookup: %s", errbuf);## 12 ##src/udpcksum/pcap.c##
- }## 13 ##src/udpcksum/pcap.c##
- printf("device = %s\n", device);## 14 ##src/udpcksum/pcap.c##
- /* 4hardcode: promisc=0, to_ms=500 */## 15 ##src/udpcksum/pcap.c##
- if ((pd = pcap_open_live(device, snaplen, 0, 500, errbuf)) == NULL)## 16 ##src/udpcksum/pcap.c##
- err_quit("pcap_open_live: %s", errbuf);## 17 ##src/udpcksum/pcap.c##
- if (pcap_lookupnet(device, &localnet, &netmask, errbuf) < 0)## 18 ##src/udpcksum/pcap.c##
- err_quit("pcap_lookupnet: %s", errbuf);## 19 ##src/udpcksum/pcap.c##
- if (verbose)## 20 ##src/udpcksum/pcap.c##
- printf("localnet = %s, netmask = %s\n",## 21 ##src/udpcksum/pcap.c##
- Inet_ntop(AF_INET, &localnet, str1, sizeof(str1)),## 22 ##src/udpcksum/pcap.c##
- Inet_ntop(AF_INET, &netmask, str2, sizeof(str2)));## 23 ##src/udpcksum/pcap.c##
- snprintf(cmd, sizeof(cmd), CMD,## 24 ##src/udpcksum/pcap.c##
- Sock_ntop_host(dest, destlen),## 25 ##src/udpcksum/pcap.c##
- ntohs(sock_get_port(dest, destlen)));## 26 ##src/udpcksum/pcap.c##
- if (verbose)## 27 ##src/udpcksum/pcap.c##
- printf("cmd = %s\n", cmd);## 28 ##src/udpcksum/pcap.c##
- if (pcap_compile(pd, &fcode, cmd, 0, netmask) < 0)## 29 ##src/udpcksum/pcap.c##
- err_quit("pcap_compile: %s", pcap_geterr(pd));## 30 ##src/udpcksum/pcap.c##
- if (pcap_setfilter(pd, &fcode) < 0)## 31 ##src/udpcksum/pcap.c##
- err_quit("pcap_setfilter: %s", pcap_geterr(pd));## 32 ##src/udpcksum/pcap.c##
- if ((datalink = pcap_datalink(pd)) < 0)## 33 ##src/udpcksum/pcap.c##
- err_quit("pcap_datalink: %s", pcap_geterr(pd));## 34 ##src/udpcksum/pcap.c##
- if (verbose)## 35 ##src/udpcksum/pcap.c##
- printf("datalink = %d\n", datalink);## 36 ##src/udpcksum/pcap.c##
- }## 37 ##src/udpcksum/pcap.c##
- /* end open_pcap */
- /* include next_pcap */
- char *## 38 ##src/udpcksum/pcap.c##
- next_pcap(int *len)## 39 ##src/udpcksum/pcap.c##
- {## 40 ##src/udpcksum/pcap.c##
- char *ptr;## 41 ##src/udpcksum/pcap.c##
- struct pcap_pkthdr hdr;## 42 ##src/udpcksum/pcap.c##
- /* 4keep looping until packet ready */## 43 ##src/udpcksum/pcap.c##
- while ((ptr = (char *) pcap_next(pd, &hdr)) == NULL) ;## 44 ##src/udpcksum/pcap.c##
- *len = hdr.caplen; /* captured length */## 45 ##src/udpcksum/pcap.c##
- return (ptr);## 46 ##src/udpcksum/pcap.c##
- }## 47 ##src/udpcksum/pcap.c##
- /* end next_pcap */
|