[Wireshark] PcapPlusPlus๋ก ์ค์๊ฐ ํจํท ๊ฐ์งํ๊ธฐ(์์ ํฌํจ)
PcapPlusPlus๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํ ์ค๋น ๋จ๊ณ๋ ์๋ ๋งํฌ๋ฅผ ์ฐธ๊ณ ํ์ธ์.
์์ ํ๋ก์ ํธ ๋ชฉํ
๋ณธ๋ฌธ์ ์์ ํ๋ก์ ํธ์ ๋ชฉํ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค. ํญ๋ชฉ ๋ณ๋ก ์ฐจ๊ทผ์ฐจ๊ทผ ๊ตฌํํด ๋ณด๊ฒ ์ต๋๋ค.
- ์ค์๊ฐ ๊ฐ์ง๊ฐ ํ์ํ ๋คํธ์ํฌ ์ด๋ํฐ๋ฅผ ์ ํํ๊ธฐ
- ์ ํ๋ ๋คํธ์ํฌ ์ด๋ํฐ๋ก ๋ค์ด์ค๋ ์ค์๊ฐ ํจํท์ ์ฝ์ ์ฐฝ์ ๋ณด์ฌ์ฃผ๊ธฐ
- ํด๋น ํจํท์ pcapng ํ์ผ๋ก ์ ์ฅํ๊ธฐ
1. ๋คํธ์ํฌ ์ด๋ํฐ ๋ชฉ๋ก ์ป๊ธฐ
์์ด์ด์คํฌ๋ฅผ ์คํํ๋ฉด ์ ์ผ ๋จผ์ ๋ณด์ด๋ ๊ฒ์ด ์ด๋ํฐ ๋ชฉ๋ก์ ๋๋ค. ์ด๋ํฐ๋ฅผ ์ ํํ๊ณ ์ด๊ฒ ๋๋ฉด ์บก์ฒ๊ฐ ์์๋์ง์.
PcapPlusPlus๋ก ๋คํธ์ํฌ ๋ชฉ๋ก์ ์ป๋ ๋ฐฉ๋ฒ์ ์์ฃผ ์ฝ์ต๋๋ค.
#include <PcapLiveDevice.h>
#include <PcapLiveDeviceList.h>
std::cout << "===== Device List =====" << std::endl;
int index = 0;
//auto ํ์
์ std::vector<pcpp::PcapLiveDevice*> ์
๋๋ค.
auto list = pcpp::PcapLiveDeviceList::getInstance().getPcapLiveDevicesList();
for (const auto& dev : list)
{
std::cout << "[" << index++ << "] " << dev->getDesc() << std::endl;
}
์์ ๊ฐ์ด ์ฌ์ฉํ์ฌ ์ป์ด์ง ๋ชฉ๋ก์ ์ฝ์ ์ฐฝ์ ์ถ๋ ฅํ๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
2. ์ด๋ํฐ ์ด๊ณ ๋ซ๊ธฐ
๋ชฉ๋ก์์ ์ป์ด์ง PcapLiveDevice
๊ฐ์ฒด์ open()
ํจ์๋ก ์ด๋ํฐ๋ฅผ ์ด ์ ์์ต๋๋ค. ๋ง์ฝ, ํ์์์์ด๋ ๋ฒํผ ํฌ๊ธฐ, ๋ฌด์ฐจ๋ณ๋ชจ๋(Promiscuous mode) ๋ฑ์ ์ค์ ํ๊ธฐ ์ํ๋ค๋ฉด, DeviceConfiguration
์ ์ธ์๋ก ๋๊ฒจ ์ค์ ๊ณผ ๋์์ ์ด ์ ์์ต๋๋ค.
pcpp::PcapLiveDevice* dev;
//Select capture device
dev->open();
//or
pcpp::PcapLiveDevice::DeviceConfiguration config;
config.mode = pcpp::PcapLiveDevice::DeviceMode::Promiscuous;
config.packetBufferTimeoutMs = 1000;
dev->open(config);
์บก์ฒ๊ฐ ๋๋ฌ๋ค๋ฉด, ๊ฐ๋จํ๊ฒ close()
๋ฅผ ํธ์ถํ์ฌ ๋ซ์ ์ ์์ต๋๋ค.
dev->close();
3. ์บก์ฒ ์์ํ๊ณ ๋ฉ์ถ๊ธฐ
์ด๋ํฐ๋ฅผ ์ด์๋ค๋ฉด, ํจํท์ ํ๋ํ๊ธฐ ์ํด ์บก์ฒ ์์์ ํด์ผ ํฉ๋๋ค. ์บก์ฒ๋ฅผ ์์ํ๋ ํจ์๋ startCapture()
๋ก, 4๊ฐ์ ์ค๋ฒ๋ก๋ฉ ํจ์๋ฅผ ์ง์ํฉ๋๋ค. ํน๋ณํ ๋ชฉ์ ์ด ์๋ค๋ฉด, ์ฌ์ฉํ๊ธฐ ์ฌ์ด ๊ธฐ๋ณธํ์ ์ ํํฉ๋๋ค. ํจํท์ด ์บก์ฒ๋ ๋๋ง๋ค ์ฝ๋ฐฑ ํจ์๊ฐ ํธ์ถ๋๋ ๋์์
๋๋ค.
์บก์ฒ๋ฅผ ์ ์งํ๋ ค๋ฉด ๊ฐ๋จํ๊ฒ stopCapture()
๋ฅผ ํธ์ถํ๋ฉด ๋ฉ๋๋ค.
//์ด๋ํฐ์์ ํจํท์ด ํ๋๋ ๋ ์ฝ๋ฐฑ ํจ์๊ฐ ํธ์ถ๋ฉ๋๋ค.
void packetArrives(pcpp::RawPacket* rawPacket, pcpp::PcapLiveDevice* dev, void* cookie)
{
//rawPacket์๋ ํ๋๋ ์ ๋ณด๊ฐ ๋ด๊ฒจ์์ต๋๋ค.
}
//...
dev->startCapture(packetArrives, nullptr);
//...
dev->stopCapture();
4. ์บก์ฒ๋ ํจํท ๋ถ์ํ๊ธฐ
์บก์ฒ๋ RawPacket
์๋ ์์ด์ด์คํฌ์์ ๋ณด์ด๋ ๋ชจ๋ ์ ๋ณด๊ฐ ๋์ผํ๊ฒ ๋ด๊ฒจ์์ต๋๋ค. pcpp::Packet
๊ฐ์ฒด๋ก ๋ณํํ์ฌ ๊ฐ ๋ ์ด์ด์ ์ ๋ณด๋ฅผ ์ป์ ์ ์์ต๋๋ค.
void packetArrives(pcpp::RawPacket* rawPacket, pcpp::PcapLiveDevice* dev, void* cookie)
{
pcpp::Packet packet(rawPacket);
}
์๋ฅผ ๋ค์ด, ๋ค์์ ์ ๋ณด๋ฅผ ์ป์ ์ ์์ต๋๋ค.
- ํจํท์ ์ด๊ธธ์ด
- ํ๋กํ ์ฝ ํ์
- Source IP, Destination IP Address ๋ฐ Port
- ์ฒดํฌ์ฌ ๊ณ์ฐ
- Payload ๋ฐ์ดํฐ
- TCP Flag ๋ฑ
์ด ์ธ์ ์ง์ ๋ฐ์ดํฐ ํธ์ง์ด ํ์ํ๋ค๋ฉด, Data Pointer๋ฅผ ์ป์ด ํ์ธํ ์ ์์ต๋๋ค.
5. ํจํท ๊ธฐ๋กํ๊ธฐ(Dump)
PcapPlusPlus๋ ์์ด์ด์คํฌ์ฒ๋ผ ์บก์ฒ๋ ํจํท์ pcap
๋๋ pcapng
ํ์ผ๋ก ์ ์ฅํ ์ ์์ต๋๋ค.
#include <PcapFileDevice.h>
pcpp::PcapFileWriterDevice dumper("test.pcapng");
dumper.open();
//...
dumper.writePacket(rawPacket);
//...
dumper.close();
๋ง์ฝ, ์ด๋ฏธ ์ ์ฅ๋ ํ์ผ์ ๋ถ๋ฌ์ ๊ธฐ๋ก๋ ํจํท์ ๊บผ๋ด๊ณ ์ถ๋ค๋ฉด ๋ค์์ ์์ ์ฝ๋๋ฅผ ์ฐธ๊ณ ํ์ธ์. pcap๊ณผ pcapng ํ์ผ์ ์ฝ๊ณ ์ฐ๊ธฐ ์์์ ๋๋ค.
//pcap ํ์ผ ๋ถ๋ฌ์ค๊ธฐ
pcpp::PcapFileReaderDevice pcapReader("input.pcap");
pcapReader.open();
//pcapng ํ์ผ ์์ฑํ๊ธฐ
pcpp::PcapNgFileWriterDevice pcapNgWriter("output.pcapng");
pcapNgWriter.open();
//raw packet ๊ฐ์ฒด
pcpp::RawPacket rawPacket;
//pcap ํ์ผ์ ํจํท์ ์ฝ์ด๋ค์ธ ํ pcapng ํ์ผ์ ์ฐ๊ธฐ
while (pcapReader->getNextPacket(rawPacket)) {
pcapNgWriter.writePacket(rawPacket);
}
pcapNgReader.close();
pcapNgWriter.close();
์์ ํ๋ก์ ํธ ์ค๋ช
๋ณธ๋ฌธ์ ์์ ํ๋ก๊ทธ๋จ์ ๋คํธ์ํฌ ์ด๋ํฐ์ ์ฐ๊ฒฐํ ํ 100๊ฐ์ ํจํท์ ํ๋ํ๊ณ pcapng ํ์ผ๋ก ์ ์ฅํ๋ ๋์์ ๋ณด์ฌ์ค๋๋ค. ์ฉ๋ ๋ฌธ์ ๋ก, ์ฒจ๋ถ๋ ํ์ผ์๋ npcap๊ณผ pcapplusplus ๋ผ์ด๋ธ๋ฌ๋ฆฌ ํ์ผ์ ์ ์ธํ๊ณ ํ๋ก์ ํธ ํ์ผ๋ง ์์ต๋๋ค.
์ ๋ฆฌํ๋ฉฐ
๋ณธ๋ฌธ์์๋ ๊ธฐ๋ณธ์ ์ธ ์ฌ์ฉ ๋ฐฉ๋ฒ์ ๋ค๋ค๋ดค์ต๋๋ค. Pcap++ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ฉด ํจํท ์บก์ฒ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์์ธํ ๋ชจ๋ฅด๋๋ผ๋ ์์ฃผ ์ฝ๊ฒ ์ ๊ทผํ ์ ์๋ค๋ ๊ฒ์ ์๊ฒ ๋์ต๋๋ค. ํ์ํ ๊ธฐ๋ฅ๋ง ์ ๊ตฌํํ๋ค๋ฉด ์์ด์ด์คํฌ ๋ชป์ง์์ ํจํท ๋ชจ๋ํฐ๋ง์ด ๊ฐ๋ฅํ๊ฒ ์ฃ ?
'Programming > Network' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋๊ธ
์ด ๊ธ ๊ณต์ ํ๊ธฐ
-
๊ตฌ๋
ํ๊ธฐ
๊ตฌ๋ ํ๊ธฐ
-
์นด์นด์คํก
์นด์นด์คํก
-
๋ผ์ธ
๋ผ์ธ
-
ํธ์ํฐ
ํธ์ํฐ
-
Facebook
Facebook
-
์นด์นด์ค์คํ ๋ฆฌ
์นด์นด์ค์คํ ๋ฆฌ
-
๋ฐด๋
๋ฐด๋
-
๋ค์ด๋ฒ ๋ธ๋ก๊ทธ
๋ค์ด๋ฒ ๋ธ๋ก๊ทธ
-
Pocket
Pocket
-
Evernote
Evernote
๋ค๋ฅธ ๊ธ
-
[Wireshark] Visual Studio์์ PcapPlusPlus ์ฌ์ฉ์ ์ํ ์ค๋น ๋จ๊ณ์ ์์ ์ฝ๋ ์คํํ๊ธฐ
[Wireshark] Visual Studio์์ PcapPlusPlus ์ฌ์ฉ์ ์ํ ์ค๋น ๋จ๊ณ์ ์์ ์ฝ๋ ์คํํ๊ธฐ
2023.01.02 -
[Wireshark] ๋คํธ์ํฌ ํจํท ๋ชจ๋ํฐ๋ง์ PcapPlusPlus๋ก ์ฝ๊ฒ!
[Wireshark] ๋คํธ์ํฌ ํจํท ๋ชจ๋ํฐ๋ง์ PcapPlusPlus๋ก ์ฝ๊ฒ!
2022.12.30 -
[Wireshark] ํจํท ๋ถ์์ ์์, ์์ด์ด์คํฌ! ๊ธฐ๋ณธ ์ฌ์ฉ๋ฒ ์ ๋ฆฌ
[Wireshark] ํจํท ๋ถ์์ ์์, ์์ด์ด์คํฌ! ๊ธฐ๋ณธ ์ฌ์ฉ๋ฒ ์ ๋ฆฌ
2022.12.15 -
[๋คํธ์ํฌ] iPerf3๋ก ๋คํธ์ํฌ ๋ถํ ํ ์คํธ ์ฝ๊ฒ ํ๊ธฐ
[๋คํธ์ํฌ] iPerf3๋ก ๋คํธ์ํฌ ๋ถํ ํ ์คํธ ์ฝ๊ฒ ํ๊ธฐ
2022.12.11