summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--mainwindow.cpp18
-rw-r--r--pcapplusplus.cpp16
2 files changed, 19 insertions, 15 deletions
diff --git a/mainwindow.cpp b/mainwindow.cpp
index d4aeac2..edd8dfd 100644
--- a/mainwindow.cpp
+++ b/mainwindow.cpp
@@ -155,11 +155,8 @@ MainWindow::MainWindow(QWidget *parent)
connect(ui->actionOpen, &QAction::triggered, this, [this, enableTableButtons, enableMenuButtons, enableHexEditButtons](bool){
QString fileName = QFileDialog::getOpenFileName(this, tr("Open PCAP File"), "", tr("PCAP Files (*.pcap);;All Files (*.*)"));
if (fileName.length() > 0) {
- if (ppp) {
- delete ppp;
- ppp = nullptr;
- }
ui->lineEdit->clear();
+ ui->tableWidget->clearSelection();
ui->tableWidget->clear();
ui->tableWidget->setRowCount(0);
myHexEdit.editor.data().data_ptr()->clear();
@@ -167,6 +164,11 @@ MainWindow::MainWindow(QWidget *parent)
enableMenuButtons(this, true);
enableHexEditButtons(this, false);
ui->actionSave_Selection->setEnabled(false);
+
+ if (ppp) {
+ delete ppp;
+ ppp = nullptr;
+ }
ppp = new PcapPlusPlus(fileName.toStdString());
if (ppp) emit processPcap();
}
@@ -205,6 +207,7 @@ MainWindow::MainWindow(QWidget *parent)
pcapWriter.writePacket(*rawPacket);
}
pcapWriter.flush();
+ pcapWriter.close();
}
}
});
@@ -220,10 +223,15 @@ MainWindow::MainWindow(QWidget *parent)
if (!pcapWriter.open())
throw std::runtime_error("Could not open file " + fileName.toStdString() + " for writing.");
{
- for (const auto & selected : ui->tableWidget->selectedRanges()) {
+ QList<QTableWidgetSelectionRange> selection(ui->tableWidget->selectedRanges());
+ std::sort(selection.begin(), selection.end(), [](const QTableWidgetSelectionRange & a, const QTableWidgetSelectionRange & b){
+ return a.topRow() < b.topRow();
+ });
+ for (const auto & selected : selection) {
pcapWriter.writePacket(ppp->getRawPacket(selected.topRow()));
}
pcapWriter.flush();
+ pcapWriter.close();
}
}
});
diff --git a/pcapplusplus.cpp b/pcapplusplus.cpp
index 004db71..d8b3a1c 100644
--- a/pcapplusplus.cpp
+++ b/pcapplusplus.cpp
@@ -125,8 +125,7 @@ bool PcapPlusPlus::randomizeIp(size_t index, bool isSourceIp)
{
std::default_random_engine generator(std::chrono::system_clock::now().time_since_epoch().count());
auto retval = false;
- pcpp::RawPacket rawPacket(getRawPacket(index));
- pcpp::Packet parsedPacket(&rawPacket);
+ auto parsedPacket = pcpp::Packet(&getRawPacket(index));
auto * ip4Layer = parsedPacket.getLayerOfType<pcpp::IPv4Layer>();
auto * ip6Layer = parsedPacket.getLayerOfType<pcpp::IPv6Layer>();
@@ -134,9 +133,9 @@ bool PcapPlusPlus::randomizeIp(size_t index, bool isSourceIp)
std::uniform_int_distribution<unsigned int> ip4Distribution(0, 0xFFFFFFFF);
if (isSourceIp)
- ip4Layer->setSrcIPv4Address(pcpp::IPv4Address(ip4Distribution(generator)));
+ ip4Layer->getIPv4Header()->ipSrc = pcpp::IPv4Address(ip4Distribution(generator)).toInt();
else
- ip4Layer->setDstIPv4Address(pcpp::IPv4Address(ip4Distribution(generator)));
+ ip4Layer->getIPv4Header()->ipDst = pcpp::IPv4Address(ip4Distribution(generator)).toInt();
retval = true;
}
@@ -146,17 +145,14 @@ bool PcapPlusPlus::randomizeIp(size_t index, bool isSourceIp)
unsigned long long int newIp6Addr[2] { ip6Distribution(generator), ip6Distribution(generator) };
if (isSourceIp)
- ip6Layer->setSrcIPv6Address(reinterpret_cast<uint8_t *>(newIp6Addr));
+ std::memcpy(ip6Layer->getIPv6Header()->ipSrc, reinterpret_cast<uint8_t *>(newIp6Addr), 16);
else
- ip6Layer->setDstIPv6Address(reinterpret_cast<uint8_t *>(newIp6Addr));
+ std::memcpy(ip6Layer->getIPv6Header()->ipDst, reinterpret_cast<uint8_t *>(newIp6Addr), 16);
retval = true;
}
- rawPackets.erase(rawPackets.cbegin() + index);
- rawPackets.insert(rawPackets.cbegin() + index, rawPacket);
- parsedPackets.erase(parsedPackets.cbegin() + index);
- parsedPackets.insert(parsedPackets.cbegin() + index, parsedPacket);
+ parsedPackets.at(index) = parsedPacket;
return retval;
}