-
Notifications
You must be signed in to change notification settings - Fork 22
/
cWinpcapSend.cpp
68 lines (56 loc) · 2.06 KB
/
cWinpcapSend.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
/*
*
* Copyright (C) 2013 Anwar Mohamed <anwarelmakrahy[at]gmail.com>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to Anwar Mohamed
* anwarelmakrahy[at]gmail.com
*
*/
#include "Packetyzer.h"
using namespace Packetyzer::Send;
cWinpcapSend::cWinpcapSend()
{
isReady = InitializeAdapters();
};
BOOL cWinpcapSend::SendPacket(UINT AdapterIndex, cPacket* Packet)
{
UINT i=0;
if (AdapterIndex< 1 || AdapterIndex > nAdapters) return FALSE;
for (d=alldevs, i=0; i< AdapterIndex-1 ;d=d->next, i++);
if ((fp=pcap_open(d->name, 65536, PCAP_OPENFLAG_PROMISCUOUS, 1000, NULL, errbuf)) == NULL) return FALSE;
if (pcap_sendpacket(fp, Packet->RawPacket, Packet->PacketSize) != 0) return FALSE;
return TRUE;
}
BOOL cWinpcapSend::InitializeAdapters()
{
if (pcap_findalldevs_ex(PCAP_SRC_IF_STRING, NULL, &alldevs, errbuf) == -1) return FALSE;
nAdapters = 0;
Adapters = (NETWORK_ADAPTERS_SEND*)malloc(nAdapters * sizeof(NETWORK_ADAPTERS_SEND));
for(d=alldevs; d; d=d->next)
{
Adapters = (NETWORK_ADAPTERS_SEND*)realloc(Adapters, (nAdapters + 1) * sizeof(NETWORK_ADAPTERS_SEND));
strcpy_s((CHAR*)Adapters[nAdapters].ID,strlen(d->name) + 1, d->name);
if (d->description)
strcpy_s((CHAR*)Adapters[nAdapters].Name, strlen(d->description) + 1, d->description);
else
strcpy_s((CHAR*)Adapters[nAdapters].Name, strlen("No description available"), "No description available");
nAdapters++;
}
return TRUE;
};
cWinpcapSend::~cWinpcapSend()
{
pcap_freealldevs(alldevs);
free(Adapters);
}