TCP/IP笔记-Qt使用Win10pcap发送以太帧(理论与实践)
生活随笔
收集整理的這篇文章主要介紹了
TCP/IP笔记-Qt使用Win10pcap发送以太帧(理论与实践)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
首先來介紹下以太幀理論:
以太幀是包含MAC幀的,先看下MAC幀:
目的地址:接收幀的網絡適配器的物理地址(MAC地址);
源地址:發送幀的網絡適配器的物理地址(MAC地址);
類型:上層協議的類型。在處理數據時必須設置該字段,表示數據交付給哪個協議處理,如0x0800,表示交付給IP協議。
數據:表示交付給上一層的數據,以太幀最小為46字節,最大為15000,不足46字節會自動填充。
FCS幀校驗序列:檢測該幀是否出錯,為4個字節。接收方會程序計算CRC,然后與FCS進行對比,一樣則沒問題。不一樣,則丟棄。
?
從mac層到物理層會添加前同步碼:用來使接收端的適配器在MAC幀時能夠迅速調整時鐘頻率,使得它和發送方相同。前同步碼為7字節。
幀開始定位符:幀的啟初符,1字節,前6為0和1交替,后2個為連續的1,告訴適配器,幀來了。
?
實踐:
源碼如下:
pro
QT -= guiCONFIG += c++11 console CONFIG -= app_bundleDEFINES += QT_DEPRECATED_WARNINGSSOURCES += \main.cppqnx: target.path = /tmp/$${TARGET}/bin else: unix:!android: target.path = /opt/$${TARGET}/bin !isEmpty(target.path): INSTALLS += targetINCLUDEPATH += D:/winscp/WpdPack/Include LIBS += -L D:/winscp/WpdPack/Lib/libpacket.a \-L D:/winscp/WpdPack/Lib/libwpcap.amain.cpp
#define HAVE_REMOTE#include <QCoreApplication> #include <QDebug> #include "pcap.h" #include "remote-ext.h"int main(int argc, char *argv[]) {QCoreApplication a(argc, argv);QString devName;//獲取網卡pcap_if_t *allDevs;char errbuf[PCAP_ERRBUF_SIZE];if(pcap_findalldevs(&allDevs, errbuf) == -1){qDebug() << "error:" << errbuf;return 0;}devName = allDevs->name;pcap_freealldevs(allDevs);//打卡網卡pcap_t *fp;u_char packet[100];if((fp= pcap_open(devName.toStdString().c_str(), 100, PCAP_OPENFLAG_PROMISCUOUS, 1000, NULL, errbuf)) == NULL){qDebug() << "error:" << errbuf;return 0;}packet[0]=1;packet[1]=1;packet[2]=1;packet[3]=1;packet[4]=1;packet[5]=1;packet[6]=2;packet[7]=2;packet[8]=2;packet[9]=2;packet[10]=2;packet[11]=2;for(int i = 12; i < 100; i++){packet[i]=0xFF;}if(pcap_sendpacket(fp, packet, 100) != 0){qDebug() << "send error:" << pcap_geterr(fp);return 0;}qDebug() << "over";return a.exec(); }抓包如下:
可見其以太幀:
目的mac:01:01:01:01:01:01 ? ? ? 6 * 8=48位
源mac:02:02:02:02:02:02 ? ? ? ? 6 * 8=48位
類型:ff ff 2 * 8=16位
?
下面就是數據位了。
?
源碼打包下載地址:
https://github.com/fengfanchen/Qt/tree/master/EthernetNetWork
?
總結
以上是生活随笔為你收集整理的TCP/IP笔记-Qt使用Win10pcap发送以太帧(理论与实践)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Web前后端笔记-vue封装http请求
- 下一篇: 信息安全工程师笔记-综合知识冲刺(四)