root/honeyclient/branches/rel/1.0/Capture2/capture-client-xeno-mod/NetworkPacketDumper.cpp

Revision 823, 3.3 kB (checked in by xkovah, 1 year ago)

adding the files finally

Line 
1 #include "NetworkPacketDumper.h"
2
3
4
5 NetworkPacketDumper::NetworkPacketDumper(void)
6 {
7     monitorRunning = false;
8     driverInstalled = false;
9     char errbuf[PCAP_ERRBUF_SIZE];
10     pcap_if_t *allDevices;
11     pcap_if_t *device;
12
13     hModWinPcap = LoadLibrary(L"wpcap.dll");
14     if(hModWinPcap == NULL)
15     {
16         printf("NetworkPacketDumper: ERROR - wpcap.dll not found. Check that winpcap is installed on this system\n");
17     } else {
18         pfn_pcap_findalldevs = (pcap_findalldevs_c)GetProcAddress(hModWinPcap, "pcap_findalldevs");
19         pfn_pcap_open_live = (pcap_open_live_c)GetProcAddress(hModWinPcap, "pcap_open_live");
20         pfn_pcap_close = (pcap_close_c)GetProcAddress(hModWinPcap, "pcap_close");
21         pfn_pcap_dump_open = (pcap_dump_open_c)GetProcAddress(hModWinPcap, "pcap_dump_open");   
22         pfn_pcap_freealldevs = (pcap_freealldevs_c)GetProcAddress(hModWinPcap, "pcap_freealldevs");
23         pfn_pcap_dump_close = (pcap_dump_close_c)GetProcAddress(hModWinPcap, "pcap_dump_close");
24         pfn_pcap_next_ex = (pcap_next_ex_c)GetProcAddress(hModWinPcap, "pcap_next_ex");
25         pfn_pcap_dump = (pcap_dump_c)GetProcAddress(hModWinPcap, "pcap_dump");
26        
27         if(pfn_pcap_findalldevs != NULL || pfn_pcap_open_live != NULL || pfn_pcap_close != NULL ||
28             pfn_pcap_dump_open != NULL || pfn_pcap_freealldevs != NULL || pfn_pcap_dump_close != NULL ||
29             pfn_pcap_next_ex != NULL || pfn_pcap_dump != NULL )
30         {
31             driverInstalled = true;
32         } else {
33             printf("NetworkPacketDumper: ERROR - incorrect version of wpcap.dll. Check the correct version of winpcap installed\n");
34         }
35     }
36
37     if(driverInstalled)
38     {
39         if(pfn_pcap_findalldevs(&allDevices, errbuf) == -1)
40         {
41             fprintf(stderr,"error in pcap_findalldevs: %s\n", errbuf);
42         } else {
43             printf("Loading network packet dumper\n");
44         }
45        
46         for(device = allDevices; device; device = device->next)
47         {
48             if(device->name != NULL)
49             {
50                 pcap_t *fp;         
51                 if ((fp = pfn_pcap_open_live(device->name, 65536, 0, 1000, errbuf)) == NULL)
52                 {
53                     printf("\terror could not open network adapter\n");
54                 } else {
55                     /* Only start capturing packets for network adapters that have ip addresses */
56                     for(pcap_addr_t* a = device->addresses; a; a = a->next)
57                     {
58                         if(a->addr->sa_family == AF_INET)
59                         {
60                             if (a->addr)
61                             {
62                                 char * address = inet_ntoa(((struct sockaddr_in *)a->addr)->sin_addr);
63                                 printf("\tnetwork adapter found: %s\n", address);
64                                 NetworkAdapter* networkAdapter = new NetworkAdapter(this,address, fp);
65                                 adapterList.push_back(networkAdapter);
66                             }
67                         }
68                     }
69
70                 }
71                
72             }
73         }
74         pfn_pcap_freealldevs(allDevices);
75     }
76 }
77
78 NetworkPacketDumper::~NetworkPacketDumper(void)
79 {
80     stop();
81     std::list<NetworkAdapter*>::iterator it;
82     for(it = adapterList.begin(); it != adapterList.end(); it++)
83     {
84         delete *it;
85     }
86     FreeLibrary(hModWinPcap);
87 }
88
89 void
90 NetworkPacketDumper::start()
91 {
92     if(!isMonitorRunning() && isDriverInstalled())
93     {
94         std::list<NetworkAdapter*>::iterator it;
95         for(it = adapterList.begin(); it != adapterList.end(); it++)
96         {
97             (*it)->start();
98
99         }
100         monitorRunning = true;
101     }
102 }
103
104 void
105 NetworkPacketDumper::stop()
106 {   
107     if(isMonitorRunning() && isDriverInstalled())
108     {
109         std::list<NetworkAdapter*>::iterator it;
110         for(it = adapterList.begin(); it != adapterList.end(); it++)
111         {
112             (*it)->stop();
113         }
114         monitorRunning = false;
115     }   
116 }
Note: See TracBrowser for help on using the browser.