91av视频/亚洲h视频/操亚洲美女/外国一级黄色毛片 - 国产三级三级三级三级

  • 大小: 20KB
    文件類型: .zip
    金幣: 2
    下載: 0 次
    發布日期: 2021-07-05
  • 語言: 其他
  • 標簽: socket??arp??linux??協議??

資源簡介

arp(地址解析協議)實例示范, 含發送和接收,在linux下跑通,帶makefile,可用來學習理解arp協議

資源截圖

代碼片段和文件信息

//?arp.cpp?:?定義控制臺應用程序的入口點。
//

#include?
#include?
#include?
#include?
#include?
#include?
#include?
#include?
#include?
#include?
#include?
#include?
#include?
#include??/*?需要里面的?glibc?版本號?*/
#include?
#if?__GLIBC__?>=?2?&&?__GLIBC_MINOR?>=?1
#include?
#include??/*?鏈路層(L2)協議?*/
#else
#include?
#include?
#include??/*?鏈路層協議?*/
#endif
#include?

/**
以太網的頭部結構:
struct?ether_header
{
u_int8_t?ether_dhost[ETH_ALEN];??????//?destination?eth?addr
u_int8_t?ether_shost[ETH_ALEN];??????//?source?ether?addr???
u_int16_t?ether_type;?????????????????//?packet?type?ID?field
}?__attribute__?((__packed__));
整個以太網的頭部包括:?目的地址(6字節),源地址(6字節),類型(2字節),幀內數據(46-1500個字節),CRC校驗和(4字節)
#define?ETH_ALEN?6?//以太網地址的長度
#define?ETH_HALEN?14?//以太網頭部的總長度??(6+6+2)
#define?ETH_ZLEN?60?//不含CRC校驗數據的數據最小長度(46+14)
#define?ETH_DATA_LEN?1500??//幀內數據的最大長度
#define?ETH_frame_LEN?1514//不含CRC最大以太網長度(1500+14)
ARP頭部信息:
struct?arphdr{
__be16?ar_hrd;//硬件類型?1-硬件接口為以太網接口
__be16?ar_pro;//協議類型-0x0800高層協議為IP協議?
unsigned?char?ar_hln;//硬件地址長度-6字節?MAC
unsigned?char?ar_pln;//協議地址長度-4字節為IP
__be16?ar_op;//ARP操作碼-1?ARP請求

}
ARP協議數據結構:
struct?ether_arp{
struct?arphdr?ea_hdr;?//ARPfixed-size?header(ARP固定大小的報頭)
u_char?arp_sha[ETHER_ADDR_LEN];?//sender?hardware?address(發送端硬件地址)
u_char?arp_spa[4];?//sender?protocol?address(發送端協議地址)
u_char?arp_tha[ETHER_ADDR_LEN];?//?target?hardware?address(接收端硬件地址)
u_char?arp_tpa[4];?//target?protocol?address(接收端協議地址)
};
#define?arp_hrd?ea_hdr.ar_hrd
#define?arp_pro?ea_hdr.ar_pro
#define?arp_hln?ea_hdr.ar_hln
#define?arp_pln?ea_hdr.ar_pln
#define?arp_op?ea_hdr.ar_op

sockaddr_ll為設備無關的物理層地址結構,描述發送端的地址結構

struct?sockaddr_ll
{
unsigned?short?sll_family;??總填?AF_PACKET?
unsigned?short?sll_protocol;?網絡序列的物理層協議號?0x806為ARP協議
int?sll_ifindex;??接口編號??eth0對應的編號?
unsigned?short?sll_hatype;?頭部類型?ARPHRD_ETHER為以太網
unsigned?char?sll_pkttype;?包類型?PACKET_HOST
unsigned?char?sll_halen;??地址長度??MAC地址長度6字節
unsigned?char?sll_addr[8];物理地址?MAC地址只用了前面的6字節
};

FF:FF:FF:FF:FF:FF
SOCK_RAW原始套接字的分析:
(1)socket(AF_INETSOCK_RAWIPPROTO_TCP|IPPROTO_UDP|IPPROTO_ICMP);//發送或接收ip數據包得到原始的IP包
(2)socket(PF_PACKETSOCK_RAWhtons(ETH_P_IP|ETH_P_ARP|ETH_P_RAP|ETH_P_ALL));//發送或接收以太網數據幀
(1)使用第一種套接字類型,能得到發往本機的原始的IP數據包,但不能得到發往非本機的IP數據包,被過濾了,也不能得到從本機發出去的數據包。這類協議可自己組織TCP,ICMP,UDP數據包。
(2)第二種套接字能收到發往本地的MAC幀,也能收到從本機發出去的數據幀(第3個參數為ETH_P_ALL)能接收到非發往本地的MAC數據幀(網卡需要設置為promisc混雜模式)
協議類型:
ETH_P_IP?0X800?只接收發往本機的mac的ip類型的數據幀
ETH_P_ARP?0X806?只接收發往本機的arp類型的數據幀
ETH_P_RARP?0x8035?只接受發往本機的rarp類型的數據幀
ETH_P_ALL?0X3????接收發往本機的MAC所有類型iparprarp數據幀,接收從本機發出去的數據幀,混雜模式打開的情況下,會接收到非發往本地的MAC數據幀
此時設備無關的物理地址使用struct?sockaddr_ll
從而得到MAC幀
**/

//發送ARP數據,ARP協議結構+以太網頭部
int?main(int?argc?char*argv[]

?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件????????1159??2015-01-15?22:27??ReadMe.txt
?????目錄???????????0??2017-02-16?15:39??arp-recv\
?????文件????????2275??2015-01-18?11:17??arp-recv\arp_recv.cpp
?????文件?????????906??2015-01-18?11:28??arp-recv\Makefile
?????目錄???????????0??2017-02-16?15:39??arp-send\
?????文件????????3069??2015-01-20?21:11??arp-send\arp_send.cpp
?????文件?????????906??2015-01-15?23:44??arp-send\Makefile
?????文件???????15092??2015-01-15?23:18??arp
?????文件????????8309??2015-01-15?23:18??arp.cpp
?????文件?????????871??2015-01-15?22:27??arp.sln
?????文件????????4111??2015-01-20?23:58??arp.vcproj
?????文件???????11071??2015-01-16?00:11??arp_send

評論

共有 條評論