当前位置: 首页 > news >正文

Qt开发网络嗅探器02

预览

书接上文,我们要写出主窗口,先来看一下成品。

主要是两个ComboBox和两个Pushbutton还有TableWidget和TreeWidget。

MianWIndow代码

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "flatui.h"MainWindow::MainWindow(QWidget *parent) :QMainWindow(parent),ui(new Ui::MainWindow)
{ui->setupUi(this);pInit();uiInit();menuBarInit();hardwareInfoInit();cntListUpdate(pkgCnt);ifSet = true;
}MainWindow::~MainWindow()
{delete ui;
}void MainWindow::pInit()
{pkgCnt = new pkg_count;this->currentDev = NULL;this->devList.clear();this->pkgList.clear();netpkgList.clear();this->pkgSeq = 0;pkgCnt->n_arp = 0;pkgCnt->n_http = 0;pkgCnt->n_icmp = 0;pkgCnt->n_icmp6 = 0;pkgCnt->n_ipv4 = 0;pkgCnt->n_other = 0;pkgCnt->n_tcp = 0;pkgCnt->n_ttl = 0;pkgCnt->n_udp = 0;pkgCnt->n_ipv6 = 0;
}void MainWindow::uiInit()
{QWidget *newWidget = new QWidget(this);this->setCentralWidget(newWidget);this->setFixedSize(1600, 900);this->setWindowIcon(QIcon(QPixmap(":/icon.jpeg")));this->setWindowTitle("Network Sniffer");QFont font;font.setPixelSize(30);this->labNetworkCard = new QLabel(this);this->cmbNetworkCard = new QComboBox(this);this->cmbNetworkCard->setFixedWidth(800);FlatUI::setComboBoxQss(cmbNetworkCard);this->labNetworkCard->setText("Netword Card");this->labNetworkCard->setFixedSize(200, 36);this->labNetworkCard->setFont(font);this->labCaptureRule = new QLabel(this);this->labCaptureRule->setText("Capture Type");this->labCaptureRule->setFixedSize(200, 36);this->labCaptureRule->setFont(font);this->cmbCaptureRule = new QComboBox(this);FlatUI::setComboBoxQss(cmbCaptureRule);font.setPixelSize(25);QStringList typeList;typeList<< "All"<< "Tcp"<< "Udp"<< "Icmp"<< "Http"<< "Arp"<< "Ipv4"<< "Other";this->cmbCaptureRule->addItems(typeList);this->btnBeginCapture = new QPushButton(this);this->btnEndCapture = new QPushButton(this);this->cmbCaptureRule->setFont(font);this->cmbCaptureRule->setFixedSize(700, 36);this->cmbNetworkCard->setFont(font);this->cmbNetworkCard->setFixedSize(1300, 36);QHBoxLayout *hbNetworkCard = new QHBoxLayout(this);QHBoxLayout *hbCaptureRule = new QHBoxLayout(this);hbCaptureRule->layout()->setAlignment(Qt::AlignLeft);hbNetworkCard->layout()->setAlignment(Qt::AlignLeft);hbNetworkCard->addWidget(labNetworkCard);hbNetworkCard->addWidget(cmbNetworkCard);hbCaptureRule->addWidget(labCaptureRule);hbCaptureRule->addWidget(cmbCaptureRule);hbCaptureRule->addWidget(btnBeginCapture);hbCaptureRule->addWidget(btnEndCapture);FlatUI::setPushButtonQss(btnBeginCapture);FlatUI::setPushButtonQss(btnEndCapture);font.setPixelSize(20);this->btnBeginCapture->setFixedSize(200, 36);this->btnBeginCapture->setText("Begin");this->btnBeginCapture->setFont(font);this->btnEndCapture->setFixedSize(200, 36);this->btnEndCapture->setText("End");this->btnEndCapture->setFont(font);this->btnEndCapture->setEnabled(false);this->captureTableWidget = new QTableWidget(this);captureTableWidget->setAutoScroll(true);captureTableWidget->verticalHeader()->setHidden(true);captureTableWidget->setRowCount(60);captureTableWidget->setFixedWidth(1570);captureTableWidget->setFixedHeight(300);captureTableWidget->setSelectionBehavior(QAbstractItemView::SelectRows);captureTableWidget->setSelectionMode(QAbstractItemView::SingleSelection);captureTableWidget->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch);captureTableWidget->setEditTriggers(QAbstractItemView::NoEditTriggers);captureTableWidget->insertRow(0);captureTableWidget->insertColumn(0);captureTableWidget->insertColumn(1);captureTableWidget->insertColumn(2);captureTableWidget->insertColumn(3);captureTableWidget->insertColumn(4);captureTableWidget->insertColumn(5);captureTableWidget->insertColumn(6);captureTableWidget->insertColumn(7);captureTableWidget->setHorizontalHeaderItem(0, new QTableWidgetItem("Num"));captureTableWidget->setHorizontalHeaderItem(1, new QTableWidgetItem("Time"));captureTableWidget->setHorizontalHeaderItem(2, new QTableWidgetItem("Src Mac"));captureTableWidget->setHorizontalHeaderItem(3, new QTableWidgetItem("Dest Mac"));captureTableWidget->setHorizontalHeaderItem(4, new QTableWidgetItem("Length"));captureTableWidget->setHorizontalHeaderItem(5, new QTableWidgetItem("Protocol"));captureTableWidget->setHorizontalHeaderItem(6, new QTableWidgetItem("Src IP"));captureTableWidget->setHorizontalHeaderItem(7, new QTableWidgetItem("Dest IP"));QGridLayout *gridLayout = new QGridLayout(this);QVBoxLayout *Layout = new QVBoxLayout(this);this->labTcpPack = new QLabel(this);this->labTcpPack->setText("Tcp");this->editTcpPack = new QLineEdit(this);this->labUdpPack = new QLabel(this);this->labUdpPack->setText("Udp");this->editUdpPack = new QLineEdit(this);this->labIcmpPack = new QLabel(this);this->labIcmpPack->setText("Icmp4/6");this->editIcmpPack = new QLineEdit(this);this->labHttpPack = new QLabel(this);this->labHttpPack->setText("Http");this->editHttpPack = new QLineEdit(this);this->labIpv4Pack = new QLabel(this);this->labIpv4Pack->setText("Ipv4/6");this->editIpv4Pack = new QLineEdit(this);this->labOther = new QLabel(this);this->labOther->setText("Other");this->editOtherPack = new QLineEdit(this);this->labCount = new QLabel(this);this->labCount->setText("Count");this->editCount = new QLineEdit(this);this->labArpPack = new QLabel(this);this->labArpPack->setText("Arp");this->editArpPack = new QLineEdit(this);QList<QLineEdit *> editList= this->findChildren<QLineEdit *>();foreach (QLineEdit *edit, editList) {FlatUI::setLineEditQss(edit);edit->setReadOnly(true);}gridLayout->addWidget(labTcpPack, 0, 0);gridLayout->addWidget(editTcpPack, 0, 1);gridLayout->addWidget(labUdpPack, 0, 2);gridLayout->addWidget(editUdpPack, 0, 3);gridLayout->addWidget(labIcmpPack, 0, 4);gridLayout->addWidget(editIcmpPack, 0, 5);gridLayout->addWidget(labHttpPack, 1, 0);gridLayout->addWidget(editHttpPack, 1, 1);gridLayout->addWidget(labArpPack, 1, 2);gridLayout->addWidget(editArpPack, 1, 3);gridLayout->addWidget(labIpv4Pack, 1, 4);gridLayout->addWidget(editIpv4Pack, 1, 5);gridLayout->addWidget(labOther, 2, 0);gridLayout->addWidget(editOtherPack, 2, 1);gridLayout->addWidget(labCount, 2, 2);gridLayout->addWidget(editCount, 2, 3);font.setPixelSize(25);this->captureTextEdit = new QTextEdit(this);this->captureTextEdit->setFont(font);captureTextEdit->setReadOnly(true);font.setPixelSize(20);this->unpackTreeWidget = new QTreeWidget(this);this->unpackTreeWidget->setFont(font);this->unpackTreeWidget->setFixedWidth(400);unpackTreeWidget->header()->setHidden(true);unpackTreeWidget->setStyle(QStyleFactory::create("Macintosh"));unpackTreeWidget->header()->setSectionResizeMode(QHeaderView::ResizeToContents);unpackTreeWidget->header()->setStretchLastSection(false);QVBoxLayout *vbLayout = new QVBoxLayout(this);QHBoxLayout *hbLayout = new QHBoxLayout(this);vbLayout->addWidget(captureTextEdit);vbLayout->addLayout(gridLayout);hbLayout->addWidget(unpackTreeWidget);hbLayout->addLayout(vbLayout);Layout->addLayout(hbNetworkCard);Layout->addLayout(hbCaptureRule);Layout->addWidget(captureTableWidget);Layout->addLayout(hbLayout);centralWidget()->setLayout(Layout);
}void MainWindow::hardwareInfoInit()
{int cnt = 0;this->captureTextEdit->append("Localhost Name:");this->captureTextEdit->append(QHostInfo::localHostName());QList<QNetworkInterface> nets = QNetworkInterface::allInterfaces();foreach (QNetworkInterface net, nets) {if(net.flags().testFlag(QNetworkInterface::IsUp)&&net.flags().testFlag(QNetworkInterface::IsRunning)&&!net.flags().testFlag(QNetworkInterface::IsLoopBack)){for(int i=0;i<net.addressEntries().size();i++){if(net.addressEntries().at(i).ip() != QHostAddress::LocalHost&&net.addressEntries().at(i).ip().protocol() == QAbstractSocket::IPv4Protocol){this->captureTextEdit->append(QString("Devive %1\nIP:%2\nHardWare:%3%4\n%5").arg(QString::number(cnt),net.addressEntries().at(i).ip().toString(),net.humanReadableName(),net.hardwareAddress(),net.name()));cnt++;}}}}char errbuf[PCAP_ERRBUF_SIZE + 1];if(pcap_findalldevs_ex(PCAP_SRC_IF_STRING, NULL, &alldevs, errbuf) == -1){QMessageBox::warning(this, "No Device", "There are no device in your PC!");}for(d = alldevs; d; d = d->next){if(d->description){this->cmbNetworkCard->addItem(QString::fromStdString(d->description));this->devList.append(d);}}this->currentDev = alldevs;connect(this->captureTableWidget, &QTableWidget::cellDoubleClicked, this, &MainWindow::tabWidgetDoubleClickItemSlot);connect(cmbNetworkCard, SIGNAL(currentIndexChanged(int)), this, SLOT(cmbNetworkIndexChangeSlot(int)));connect(this->btnBeginCapture, SIGNAL(clicked(bool)), this, SLOT(btnBeginClickedSlot(bool)));connect(this->btnEndCapture, SIGNAL(clicked(bool)), this, SLOT(btnEndClickedSlot(bool)));
}void MainWindow::cntListUpdate(pkg_count *pkgCnts)
{this->editArpPack->setText(QString::number(pkgCnts->n_arp));this->editCount->setText(QString::number(pkgCnts->n_ttl));this->editHttpPack->setText(QString::number(pkgCnts->n_http));this->editIcmpPack->setText(QString::number(pkgCnts->n_icmp)+"/"+QString::number(pkgCnts->n_icmp6));this->editIpv4Pack->setText(QString::number(pkgCnts->n_ipv4)+"/"+QString::number(pkgCnts->n_ipv6));this->editOtherPack->setText(QString::number(pkgCnts->n_other));this->editTcpPack->setText(QString::number(pkgCnts->n_tcp));this->editUdpPack->setText(QString::number(pkgCnts->n_udp));
}void MainWindow::pkmsgAcpSlot(QString time, pkg_data *data)
{this->pkgList.append(data);char dmac[18];char smac[18];QString sip, dip;sprintf(dmac, "%02X-%02X-%02X-%02X", data->ethh->dmac[0],data->ethh->dmac[1],data->ethh->dmac[2],data->ethh->dmac[3]);sprintf(smac, "%02X-%02X-%02X-%02X", data->ethh->smac[0],data->ethh->smac[1],data->ethh->smac[2],data->ethh->smac[3]);if(0x0806 == data->ethh->type){dip = QString::number(int(data->arph->dip.byte1))+"."+QString::number(int(data->arph->dip.byte2))+"."+QString::number(int(data->arph->dip.byte3))+"."+QString::number(int(data->arph->dip.byte4));sip = QString::number(int(data->arph->sip.byte1))+"."+QString::number(int(data->arph->sip.byte2))+"."+QString::number(int(data->arph->sip.byte3))+"."+QString::number(int(data->arph->sip.byte4));}else if(0x0800 == data->ethh->type){sip = QString::number(int(data->ipv4h->srcaddr.byte1))+"."+QString::number(int(data->ipv4h->srcaddr.byte2))+"."+QString::number(int(data->ipv4h->srcaddr.byte3))+"."+QString::number(int(data->ipv4h->srcaddr.byte4));dip =  QString::number(int(data->ipv4h->dstaddr.byte1))+"."+QString::number(int(data->ipv4h->dstaddr.byte2))+"."+QString::number(int(data->ipv4h->dstaddr.byte3))+"."+QString::number(int(data->ipv4h->dstaddr.byte4));}else if(0x86dd == data->ethh->type){sip = QString::number(int(data->ipv6h->srcaddr.byte1))+"."+QString::number(int(data->ipv6h->srcaddr.byte2))+"."+QString::number(int(data->ipv6h->srcaddr.byte3))+"."+QString::number(int(data->ipv6h->srcaddr.byte4))+"."+QString::number(int(data->ipv6h->srcaddr.byte5))+"."+QString::number(int(data->ipv6h->srcaddr.byte6))+"."+QString::number(int(data->ipv6h->srcaddr.byte7))+"."+QString::number(int(data->ipv6h->srcaddr.byte8));dip = QString::number(int(data->ipv6h->dstaddr.byte1))+"."+QString::number(int(data->ipv6h->dstaddr.byte2))+"."+QString::number(int(data->ipv6h->dstaddr.byte3))+"."+QString::number(int(data->ipv6h->dstaddr.byte4))+"."+QString::number(int(data->ipv6h->dstaddr.byte5))+"."+QString::number(int(data->ipv6h->dstaddr.byte6))+"."+QString::number(int(data->ipv6h->dstaddr.byte7))+"."+QString::number(int(data->ipv6h->dstaddr.byte8));}this->captureTableWidget->insertRow(this->pkgSeq);this->captureTableWidget->setItem(this->pkgSeq, 0, new QTableWidgetItem(QString::number(this->pkgSeq)));this->captureTableWidget->setItem(this->pkgSeq, 1, new QTableWidgetItem(time));this->captureTableWidget->setItem(this->pkgSeq, 2, new QTableWidgetItem(QString(smac)));this->captureTableWidget->setItem(this->pkgSeq, 3, new QTableWidgetItem(QString(dmac)));this->captureTableWidget->setItem(this->pkgSeq, 4, new QTableWidgetItem(QString::number(data->len)));this->captureTableWidget->setItem(this->pkgSeq, 5, new QTableWidgetItem(data->pkgtype));this->captureTableWidget->setItem(this->pkgSeq, 6, new QTableWidgetItem(sip));this->captureTableWidget->setItem(this->pkgSeq, 7, new QTableWidgetItem(dip));cntListUpdate(pkgCnt);this->pkgSeq++;
}void MainWindow::errAcpSlot(QString errBuf)
{QMessageBox::warning(this, "Warning", errBuf);
}void MainWindow::cmbNetworkIndexChangeSlot(int newIndex)
{int i;for(this->currentDev = alldevs, i = 0; i < newIndex; currentDev = currentDev->next, i++);
}void MainWindow::btnBeginClickedSlot(bool isClicked)
{if(this->currentDev){this->thread = new ListenThread;connect(thread, SIGNAL(pkmsgSendSignal(QString,pkg_data*)), this,SLOT(pkmsgAcpSlot(QString,pkg_data*)));connect(thread, SIGNAL(errSendSignal(QString)), this, SLOT(errAcpSlot(QString)));thread->setCurrentDev(this->currentDev);thread->start();this->btnEndCapture->setEnabled(true);this->btnBeginCapture->setEnabled(false);this->cmbNetworkCard->setEnabled(false);ifSet = false;}else{QMessageBox::warning(this, "Warning", "No current device");return;}
}void MainWindow::btnEndClickedSlot(bool isClicked)
{qDebug()<<isClicked;isRun = false;this->btnBeginCapture->setEnabled(true);this->btnEndCapture->setEnabled(false);this->cmbNetworkCard->setEnabled(true);
}void MainWindow::tabWidgetDoubleClickItemSlot(int row, int col)
{if(row >= this->pkgSeq)return;this->unpackTreeWidget->clear();pkg_data *pk = (pkg_data*)(pkgList.at(row));u_char *npk = (u_char*)(netpkgList.at(row));QTreeWidgetItem *rootItem = new QTreeWidgetItem(unpackTreeWidget);QTreeWidgetItem *seqItem = new QTreeWidgetItem(rootItem);QTreeWidgetItem *linkItem = new QTreeWidgetItem(seqItem);QTreeWidgetItem *smacItem = new QTreeWidgetItem(linkItem);QTreeWidgetItem *dmacItem = new QTreeWidgetItem(linkItem);QTreeWidgetItem *proItem = new QTreeWidgetItem(linkItem);rootItem->setText(0, "packet analyze");rootItem->addChild(seqItem);seqItem->setText(0, QString::number(row)+"th packet");seqItem->addChild(linkItem);linkItem->setText(0, "Link layer");QList<QTreeWidgetItem *> linkList;linkList<< smacItem<< dmacItem<< proItem;linkItem->addChildren(linkList);smacItem->setText(0, "SrcMac:"+captureTableWidget->item(row, 2)->text());dmacItem->setText(0, "DstMac:"+captureTableWidget->item(row, 3)->text());if(this->pkgList.at(row)->ethh->type == 0x0800){proItem->setText(0, "Protocol: 0x0800"); QTreeWidgetItem *ipItem = new QTreeWidgetItem(seqItem);ipItem->setText(0, "Network layer");QTreeWidgetItem *verItem = new QTreeWidgetItem(ipItem);verItem->setText(0, "Version: " + QString::number((pk->ipv4h->ver_ihl & 0xf0)>>4));QTreeWidgetItem *hlenItem = new QTreeWidgetItem(ipItem);hlenItem->setText(0, "IPH len: " + QString::number(pk->ipv4h->ver_ihl & 0xf));QTreeWidgetItem *tosItem = new QTreeWidgetItem(ipItem);tosItem->setText(0, "Tos:" + QString::number(int(pk->ipv4h->tos)));QTreeWidgetItem *tlenItem = new QTreeWidgetItem(ipItem);tlenItem->setText(0, "Sum len: " + QString::number(int(pk->ipv4h->tlen)));QTreeWidgetItem *idItem = new QTreeWidgetItem(ipItem);idItem->setText(0, "Id:" + QString::number(int(pk->ipv4h->Identification)));QTreeWidgetItem *fragItem = new QTreeWidgetItem(ipItem);fragItem->setText(0, "Frag off: " + QString::number(int(pk->ipv4h->flags_fo)));QTreeWidgetItem *ttlItem = new QTreeWidgetItem(ipItem);ttlItem->setText(0, "Ttl: " + QString::number(int(pk->ipv4h->ttl)));QTreeWidgetItem *protoItem = new QTreeWidgetItem(ipItem);switch(pk->ipv4h->proto){case 6:{if(ntohs(pk->tcph->dstport) == 80 || ntohs(pk->tcph->srcport) == 80)protoItem->setText(0, "Protocol: " + QString("HTTP"));elseprotoItem->setText(0, "Protocol: " + QString("TCP"));QTreeWidgetItem *tcpItem = new QTreeWidgetItem(seqItem);tcpItem->setText(0, "Transport layer");QTreeWidgetItem *seqItem = new QTreeWidgetItem(tcpItem);QTreeWidgetItem *ackseqItem = new QTreeWidgetItem(tcpItem);QTreeWidgetItem *reslItem = new QTreeWidgetItem(tcpItem);QTreeWidgetItem *doffItem = new QTreeWidgetItem(tcpItem);QTreeWidgetItem *finItem = new QTreeWidgetItem(tcpItem);QTreeWidgetItem *synItem = new QTreeWidgetItem(tcpItem);QTreeWidgetItem *pstItem = new QTreeWidgetItem(tcpItem);QTreeWidgetItem *pshItem = new QTreeWidgetItem(tcpItem);QTreeWidgetItem *ackItem = new QTreeWidgetItem(tcpItem);QTreeWidgetItem *urgItem = new QTreeWidgetItem(tcpItem);QTreeWidgetItem *eceItem = new QTreeWidgetItem(tcpItem);QTreeWidgetItem *cwrItem = new QTreeWidgetItem(tcpItem);QTreeWidgetItem *windowItem = new QTreeWidgetItem(tcpItem);QTreeWidgetItem *checkItem = new QTreeWidgetItem(tcpItem);QTreeWidgetItem *urgpItem = new QTreeWidgetItem(tcpItem);QTreeWidgetItem *optItem = new QTreeWidgetItem(tcpItem);ipItem->setText(0, "IP Header");seqItem->setText(0, "Seq" + QString::number(pk->tcph->seq));ackseqItem->setText(0, "Ack_seq: " + QString::number(pk->tcph->ack_seq));reslItem->setText(0, "Resl: " + QString::number(pk->tcph->resl));doffItem->setText(0, "Doff: " + QString::number(pk->tcph->doff));finItem->setText(0, "Fin: " + QString::number(pk->tcph->fin));synItem->setText(0, "Syn: " + QString::number(pk->tcph->syn));pstItem->setText(0, "Pst: " + QString::number(pk->tcph->pst));pshItem->setText(0, "Psh: " + QString::number(pk->tcph->psh));ackItem->setText(0, "Ack: " + QString::number(pk->tcph->ack));urgItem->setText(0, "Urg: " + QString::number(pk->tcph->urg));eceItem->setText(0, "Ece: " + QString::number(pk->tcph->ece));cwrItem->setText(0, "Cwr: " + QString::number(pk->tcph->cwr));windowItem->setText(0, "Window: " + QString::number(pk->tcph->window));checkItem->setText(0, "Cre: " + QString::number(pk->tcph->check));urgpItem->setText(0, "Urg_ptr: " + QString::number(pk->tcph->urg_ptr));optItem->setText(0, "opt: " + QString::number(pk->tcph->opt));break;}case 17:{protoItem->setText(0, "Protocol: " + QString("UDP"));QTreeWidgetItem *udpItem = new QTreeWidgetItem(seqItem);udpItem->setText(0, "Transport layer");QTreeWidgetItem *sportItem = new QTreeWidgetItem(udpItem);QTreeWidgetItem *dportItem = new QTreeWidgetItem(udpItem);QTreeWidgetItem *len = new QTreeWidgetItem(udpItem);QTreeWidgetItem *crc = new QTreeWidgetItem(udpItem);sportItem->setText(0, "Src port: " + QString::number(pk->udph->srcport));dportItem->setText(0, "Dst port" + QString::number(pk->udph->dstport));len->setText(0, "Len: " + QString::number(pk->udph->tlen));crc->setText(0, "Cre: " + QString::number(pk->udph->crc));;break;}case 1:{protoItem->setText(0, "Protocol: " + QString("ICMP"));QTreeWidgetItem *icmpItem = new QTreeWidgetItem(seqItem);icmpItem->setText(0, "Transport layer");QTreeWidgetItem *type = new QTreeWidgetItem(icmpItem);QTreeWidgetItem *code = new QTreeWidgetItem(icmpItem);QTreeWidgetItem *seq = new QTreeWidgetItem(icmpItem);QTreeWidgetItem *crc = new QTreeWidgetItem(icmpItem);type->setText(0, "Type: " + QString::number(pk->icmph->type));code->setText(0, "Code: " + QString::number(pk->icmph->code));seq->setText(0, "Seq: " + QString::number(pk->icmph->seq));crc->setText(0, "Crc: " + QString::number(pk->icmph->crc));break;}}QTreeWidgetItem *ckItem = new QTreeWidgetItem(ipItem);ckItem->setText(0, "Crc: " + QString::number(int(pk->ipv4h->crc)));QTreeWidgetItem *optItem = new QTreeWidgetItem(ipItem);optItem->setText(0, "Opt: " + QString::number(int(pk->ipv4h->op_pad)));}if(this->pkgList.at(row)->ethh->type == 0x0806){proItem->setText(0, "Protocol: 0x0806");QTreeWidgetItem *arpItem = new QTreeWidgetItem(seqItem);QTreeWidgetItem *hardItem = new QTreeWidgetItem(arpItem);QTreeWidgetItem *protoItem = new QTreeWidgetItem(arpItem);QTreeWidgetItem *hlenItem = new QTreeWidgetItem(arpItem);QTreeWidgetItem *plenItem = new QTreeWidgetItem(arpItem);QTreeWidgetItem *optItem = new QTreeWidgetItem(arpItem);arpItem->setText(0, "Network layer");hardItem->setText(0, "Hardware: " + QString::number(pk->arph->hardware));protoItem->setText(0, "Protocol: ARP" );hlenItem->setText(0, "Hardware len: " + QString::number(pk->arph->ml));plenItem->setText(0, "IP len: " + QString::number(pk->arph->ipl));optItem->setText(0, "Option: " + QString::number(pk->arph->opt));}else if(this->pkgList.at(row)->ethh->type == 0x86dd){proItem->setText(0, "Protocol: 0x86dd");QTreeWidgetItem *ipv6Item = new QTreeWidgetItem(seqItem);QTreeWidgetItem *verItem = new QTreeWidgetItem(ipv6Item);QTreeWidgetItem *ftypeItem = new QTreeWidgetItem(ipv6Item);QTreeWidgetItem *fidItem = new QTreeWidgetItem(ipv6Item);QTreeWidgetItem *plenItem = new QTreeWidgetItem(ipv6Item);QTreeWidgetItem *nhItem = new QTreeWidgetItem(ipv6Item);QTreeWidgetItem *hlimItem = new QTreeWidgetItem(ipv6Item);verItem->setText(0, "Version: " + QString::number(pk->ipv6h->ver));ftypeItem->setText(0, "Flow type: " + QString::number(pk->ipv6h->flowtype));fidItem->setText(0, "Flow id: " + QString::number(pk->ipv6h->flowtip));plenItem->setText(0, "Payload length: " + QString::number(pk->ipv6h->len));nhItem->setText(0, "Next header: " + QString::number(pk->ipv6h->pnext));hlimItem->setText(0, "Hop limit: " + QString::number(pk->ipv6h->lim));QTreeWidgetItem *protoItem = new QTreeWidgetItem(ipv6Item);switch(pk->ipv6h->pnext){case 0x3a:{protoItem->setText(0, "Protocol: " + QString("ICMPv6"));QTreeWidgetItem *icmpItem = new QTreeWidgetItem(seqItem);icmpItem->setText(0, "Transport layer");QTreeWidgetItem *type = new QTreeWidgetItem(icmpItem);QTreeWidgetItem *code = new QTreeWidgetItem(icmpItem);QTreeWidgetItem *seq = new QTreeWidgetItem(icmpItem);QTreeWidgetItem *crc = new QTreeWidgetItem(icmpItem);QTreeWidgetItem *optype = new QTreeWidgetItem(icmpItem);QTreeWidgetItem *oplen = new QTreeWidgetItem(icmpItem);type->setText(0, "Type: " + QString::number(pk->icmp6->type));code->setText(0, "Code: " + QString::number(pk->icmph->code));seq->setText(0, "Seq: " + QString::number(pk->icmp6->seq));crc->setText(0, "Crc: " + QString::number(pk->icmp6->crc));optype->setText(0, "Opt type: " + QString::number(pk->icmp6->op_type));oplen->setText(0, "Opt len: " + QString::number(pk->icmp6->op_len));break;}case 0x06:{if(ntohs(pk->tcph->dstport) == 80 || ntohs(pk->tcph->srcport) == 80)protoItem->setText(0, "Protocol: " + QString("HTTP"));elseprotoItem->setText(0, "Protocol: " + QString("TCP"));QTreeWidgetItem *tcpItem = new QTreeWidgetItem(seqItem);tcpItem->setText(0, "Transport layer");QTreeWidgetItem *seqItem = new QTreeWidgetItem(tcpItem);QTreeWidgetItem *ackseqItem = new QTreeWidgetItem(tcpItem);QTreeWidgetItem *reslItem = new QTreeWidgetItem(tcpItem);QTreeWidgetItem *doffItem = new QTreeWidgetItem(tcpItem);QTreeWidgetItem *finItem = new QTreeWidgetItem(tcpItem);QTreeWidgetItem *synItem = new QTreeWidgetItem(tcpItem);QTreeWidgetItem *pstItem = new QTreeWidgetItem(tcpItem);QTreeWidgetItem *pshItem = new QTreeWidgetItem(tcpItem);QTreeWidgetItem *ackItem = new QTreeWidgetItem(tcpItem);QTreeWidgetItem *urgItem = new QTreeWidgetItem(tcpItem);QTreeWidgetItem *eceItem = new QTreeWidgetItem(tcpItem);QTreeWidgetItem *cwrItem = new QTreeWidgetItem(tcpItem);QTreeWidgetItem *windowItem = new QTreeWidgetItem(tcpItem);QTreeWidgetItem *checkItem = new QTreeWidgetItem(tcpItem);QTreeWidgetItem *urgpItem = new QTreeWidgetItem(tcpItem);QTreeWidgetItem *optItem = new QTreeWidgetItem(tcpItem);ipv6Item->setText(0, "IPv6 Header");seqItem->setText(0, "Seq" + QString::number(pk->tcph->seq));ackseqItem->setText(0, "Ack_seq: " + QString::number(pk->tcph->ack_seq));reslItem->setText(0, "Resl: " + QString::number(pk->tcph->resl));doffItem->setText(0, "Doff: " + QString::number(pk->tcph->doff));finItem->setText(0, "Fin: " + QString::number(pk->tcph->fin));synItem->setText(0, "Syn: " + QString::number(pk->tcph->syn));pstItem->setText(0, "Pst: " + QString::number(pk->tcph->pst));pshItem->setText(0, "Psh: " + QString::number(pk->tcph->psh));ackItem->setText(0, "Ack: " + QString::number(pk->tcph->ack));urgItem->setText(0, "Urg: " + QString::number(pk->tcph->urg));eceItem->setText(0, "Ece: " + QString::number(pk->tcph->ece));cwrItem->setText(0, "Cwr: " + QString::number(pk->tcph->cwr));windowItem->setText(0, "Window: " + QString::number(pk->tcph->window));checkItem->setText(0, "Cre: " + QString::number(pk->tcph->check));urgpItem->setText(0, "Urg_ptr: " + QString::number(pk->tcph->urg_ptr));optItem->setText(0, "opt: " + QString::number(pk->tcph->opt));break;}case 0x11:{protoItem->setText(0, "Protocol: " + QString("UDP"));QTreeWidgetItem *udpItem = new QTreeWidgetItem(seqItem);udpItem->setText(0, "Transport layer");QTreeWidgetItem *sportItem = new QTreeWidgetItem(udpItem);QTreeWidgetItem *dportItem = new QTreeWidgetItem(udpItem);QTreeWidgetItem *len = new QTreeWidgetItem(udpItem);QTreeWidgetItem *crc = new QTreeWidgetItem(udpItem);sportItem->setText(0, "Src port: " + QString::number(pk->udph->srcport));dportItem->setText(0, "Dst port" + QString::number(pk->udph->dstport));len->setText(0, "Len: " + QString::number(pk->udph->tlen));crc->setText(0, "Cre: " + QString::number(pk->udph->crc));;break;}}}PacketTools::pack_Print(npk, pk->len, this->captureTextEdit);
}void MainWindow::exit()
{if(this->thread != nullptr){if(this->thread->isRunning()){isRun = false;Sleep(1);}delete thread;}close();}void MainWindow::reset()
{if(ifSet)return;if(this->thread != nullptr){while(this->thread->isRunning()){isRun = false;Sleep(1);}delete thread;}this->currentDev = nullptr;delete this->currentDev;pkgCnt = nullptr;delete pkgCnt;d = nullptr;delete d;pcap_freealldevs(alldevs);this->captureTableWidget->clear();this->captureTextEdit->clear();while(this->cmbNetworkCard->count())this->cmbNetworkCard->removeItem(0);pInit();hardwareInfoInit();this->btnBeginCapture->setEnabled(true);this->btnEndCapture->setEnabled(false);this->cmbNetworkCard->setEnabled(true);this->unpackTreeWidget->clear();cntListUpdate(pkgCnt);this->captureTextEdit->append("Network Sniffer has been resetted over.");
}void MainWindow::aboutmker()
{QMessageBox::about(this, "About Maker", tr("<p>电信214杨晓通</p>"));
}void MainWindow::aboutsniffer()
{QMessageBox::about(this, "About Sniffer", tr("<p>Network Sniffer 1.0 for ethernet</p>"));
}void MainWindow::menuBarInit()
{this->fileMenu = new QMenu(tr("&File"));this->aboutMenu = new QMenu(tr("&About"));this->resetAct = new QAction(tr("&Reset"));connect(resetAct, &QAction::triggered, this, &MainWindow::reset);this->resetAct->setShortcut(QKeySequence::Refresh);this->exitAct = new QAction(tr("&Exit"));connect(exitAct, &QAction::triggered, this, &MainWindow::exit);this->exitAct->setShortcut(QKeySequence::Close);this->aboutmkerAct = new QAction(tr("&About Maker"));connect(aboutmkerAct, &QAction::triggered, this, &MainWindow::aboutmker);this->aboutsnifferAct = new QAction(tr("&About"));connect(aboutsnifferAct, &QAction::triggered, this, &MainWindow::aboutsniffer);QList<QAction *> fileActList;fileActList<< this->resetAct<< this->exitAct;QList<QAction *> aboutActList;aboutActList<< aboutsnifferAct<< aboutmkerAct;this->fileMenu->addActions(fileActList);this->aboutMenu->addActions(aboutActList);ui->menuBar->addMenu(fileMenu);ui->menuBar->addMenu(aboutMenu);
}

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • webSocket模块组件
  • 八股文之java基础
  • python大小写转换、驼峰大小写转换
  • NodeJS系列面试题
  • SwiftUI 5.0(iOS 17)滚动视图的滚动目标行为(Target Behavior)解惑和实战
  • Quectel EM05-CE 模块测试
  • VScode通过Graphviz插件和dot文件绘制层次图,导出svg
  • 前端面试题整理
  • 揭开黑箱:目标检测中可解释性的重要性与实现
  • kail-linux如何使用NAT连接修改静态IP
  • Java面试题系列 - 第17天
  • FreeRTOS的互斥锁(互斥信号量)使用
  • grafana大坑,es找不到时间戳 | No date field named timestamp found
  • C语言 | Leetcode C语言题解之第240题搜索二维矩阵II
  • 【BUG】已解决:java.lang.reflect.InvocationTargetException
  • CentOS 7 防火墙操作
  • CSS 提示工具(Tooltip)
  • ECMAScript 6 学习之路 ( 四 ) String 字符串扩展
  • express如何解决request entity too large问题
  • Javascript设计模式学习之Observer(观察者)模式
  • Java基本数据类型之Number
  • Python_网络编程
  • Sublime Text 2/3 绑定Eclipse快捷键
  • uni-app项目数字滚动
  • win10下安装mysql5.7
  • 等保2.0 | 几维安全发布等保检测、等保加固专版 加速企业等保合规
  • 基于HAProxy的高性能缓存服务器nuster
  • 使用阿里云发布分布式网站,开发时候应该注意什么?
  • 移动互联网+智能运营体系搭建=你家有金矿啊!
  • ​1:1公有云能力整体输出,腾讯云“七剑”下云端
  • ​DB-Engines 12月数据库排名: PostgreSQL有望获得「2020年度数据库」荣誉?
  • ​LeetCode解法汇总2583. 二叉树中的第 K 大层和
  • ‌移动管家手机智能控制汽车系统
  • # SpringBoot 如何让指定的Bean先加载
  • #我与Java虚拟机的故事#连载06:收获颇多的经典之作
  • (1)Jupyter Notebook 下载及安装
  • (2)(2.4) TerraRanger Tower/Tower EVO(360度)
  • (C语言)求出1,2,5三个数不同个数组合为100的组合个数
  • (Oracle)SQL优化基础(三):看懂执行计划顺序
  • (附源码)ssm基于jsp的在线点餐系统 毕业设计 111016
  • (九)One-Wire总线-DS18B20
  • (强烈推荐)移动端音视频从零到上手(上)
  • (十八)SpringBoot之发送QQ邮件
  • (已更新)关于Visual Studio 2019安装时VS installer无法下载文件,进度条为0,显示网络有问题的解决办法
  • (译) 理解 Elixir 中的宏 Macro, 第四部分:深入化
  • (转)es进行聚合操作时提示Fielddata is disabled on text fields by default
  • .NET Core工程编译事件$(TargetDir)变量为空引发的思考
  • .NET 回调、接口回调、 委托
  • .NET8 动态添加定时任务(CRON Expression, Whatever)
  • .net后端程序发布到nignx上,通过nginx访问
  • .php文件都打不开,打不开php文件怎么办
  • /bin/bash^M: bad interpreter: No such file or directory
  • [ai笔记9] openAI Sora技术文档引用文献汇总
  • [c]统计数字
  • [CISCN2019 华东北赛区]Web2