日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

TCP/IP笔记-Qt使用Win10pcap发送以太帧(理论与实践)

發布時間:2025/3/15 编程问答 18 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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.a

main.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发送以太帧(理论与实践)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。