Я пытаюсь сделать самодельную систему для обмена пакетами, особенно на уровне 2 без чего-либо выше, на CentOS ...пространство имен libcrafter Конфликт/Pcap ++
Я использую
- libcrafter для создания пакетов
- pcap++ нюхать пакеты
- (crypto++ обеспечить минимальную безопасность - не по теме этого вопроса)
Дело в том, что моя программа получает и отправляет пакеты (и, таким образом, использует PCAP ++ и libcrafter), существует конфликт с классом Packet
, определенным как в libcrafter
и в Pcap++
...
Вот мой заголовок:
#include <stdio.h>
#include <iostream>
#include <getopt.h>
#include <stdlib.h>
#include <fstream>
#include <memory>
#include <pthread.h>
#include <errno.h>
#include <vector>
#include <string>
#include <sstream>
/**** LIBCRAFTER ******/
#include <MacAddress.h>
#include <IpAddress.h>
#include <PlatformSpecificUtils.h>
#include <PcapLiveDeviceList.h>
#include <PcapLiveDevice.h>
#include <EthLayer.h>
#include <PayloadLayer.h>
#include <Logger.h>
#include <in.h>
#include <PointerVector.h>
#include <crafter.h>
using namespace Crafter;
using namespace std;
а вот первая ошибка я получаю:
server_resp.cpp: In function ‘int main(int, char**)’:
server_resp.cpp:74:3: error: reference to ‘Packet’ is ambiguous
Packet pack_decod(capturedPackets.getAndRemoveFromVector(position));
^
In file included from /home/myself/Downloads/PcapPlusPlus-master/Dist/header/PcapLiveDevice.h:9:0,
from /home/myself/Downloads/PcapPlusPlus-master/Dist/header/PcapLiveDeviceList.h:5,
from server_resp.cpp:16:
/home/myself/Downloads/PcapPlusPlus-master/Dist/header/Packet.h:19:7: note: candidates are: class Packet
class Packet {
^
In file included from /usr/local/include/crafter/Crafter.h:104:0,
from /usr/local/include/crafter.h:33,
from server_resp.cpp:23:
/usr/local/include/crafter/Packet.h:44:8: note: class Crafter::Packet
class Packet {
^
Я могу предоставить MME, но это довольно длинный (150 строк), и я хотел держать вопрос просто ...
Edit: У меня также есть проблемы с классом Ethernet
Просто чтобы быть ясно, вы предлагаете создать пространство имен для '' PCAP ++, так как он не имеет его собственное пространство имен? – EisenHeim
Я ближе познакомился с источником библиотек и заметил, что Crafter уже находится в пространстве имен, тогда как pcap ++ - нет. Затем я заметил определенную строку в вашем коде: «using namespace Crafter;». В основном вам не нужно ничего делать, кроме как удалить эту строку, и просто указать, какой тип пакета вы хотите использовать в соответствии с моим ответом. В основном вам нужны некоторые средства, чтобы отличить два пакета. У Crafter уже есть дополнительная оболочка пространства имен, поэтому я буду использовать ее. Кроме того, не используйте 'namespace std;'.Это вызовет те же проблемы, что и у вас, с обычно названными функциями (такими как min и max). – Nathilion
OK, для crafter это, таким образом, Crafter :: Packet, а остальное он будет автоматически искать в pcap ++? Я не использую пространство имен:/ – EisenHeim