sockfd=socket(PF_PACKET,SOCK_RAW,0); socket传入的参数含义为: 第一个参数是协议族(protocol family),还有一个相近含义的东西是地址族(address family),现在协议族和地址族基本是等价的,内核中也是简单的宏定义替换,也就是说PF_PACKET和AF_PACKET都可以作为第一个参数,表示使用的是packet协议族 第二个参数是s...
1.socket(PF_INET, SOCK_RAW, IPPROTO_TCP|IPPROTO_UDP|IPPROTO_ICMP)发送接收ip数据包 2.socket(PF_PACKET, SOCK_RAW, htons(ETH_P_IP|ETH_P_ARP|ETH_P_ALL))发送接收以太网数据帧 3.socket(PF_PACKET, SOCK_DGRAM, htons(ETH_P_IP|ETH_P_ARP|ETH_P_ALL))发送接收以太网数据帧(不包括以太网头部...
int sock_raw_fd = socket(PF_PACKET, SOCK_RAW, htons(ETH_P_ALL)); //获取链路层的数据包 int len = recvfrom(sock_raw_fd, buf, sizeof(buf), 0, NULL, NULL); printf("len = %d\n", len); return 0; } 混杂模式 默认的情况下,我们接收数据,目的地址是本地地址,才会接收。有时候我们想...
int raw_packet(struct dhcpMessage *payload, uint32_t source_ip, int source_port, uint32_t dest_ip, int dest_port, uint8_t *dest_arp, int ifindex) { int fd; int result; struct sockaddr_ll dest; struct udp_dhcp_packet packet; if ((fd = socket(PF_PACKET, SOCK_DGRAM, htons(ETH_...
type:指定socket类型。常用的socket类型有,SOCK_STREAM、SOCK_DGRAM、SOCK_RAW、SOCK_PACKET、SOCK_SEQPACKET等等。 protocol:故名思意,就是指定协议。常用的协议有,IPPROTO_TCP、IPPTOTO_UDP、IPPROTO_SCTP、IPPROTO_TIPC等,它们分别对应TCP传输协议、UDP传输协议、STCP传输协议、TIPC传输协议。
sendto(sd, buffer, request_length, 0, (sockaddr *)&client_addr, addrlen); 三、数据链路层scoket(二层socket) 代码可以参考: (1)创建 sock = socket(PF_PACKET, SOCK_RAW, htons(ETH_P_IP));//第三个参数可以为ETH_P_ALL ETH_P_IP ETH_P_ARP等 ...
原始套接字(RawSocket)解析 原始套接字,即raw socket,可以接收本机网卡上的数据帧或者数据包,对与监听网络的流量和分析是很有作用的.一共可以有3种方式创建这种socket 1.socket(AF_INET, SOCK_RAW, IPPROTO_TCP|IPPROTO_UDP|IPPROTO_ICMP)发送接收ip数据包 2.socket(PF_PACKET, SOCK_RAW, htons(ETH_P_IP|...
协议簇是网络层的协议。一种是处理IP层即其上的数据,通过指定socket第一个参数为AF_INET来创建这种套接字。有两种原始套接字。另一种是处理数据链路层即其上的数据,通过指定socket第一个参数为AF_PACKET来创建这种套接字。 PF_PACKET支持SOCK_DGRAM和SOCK_RAW两种socket类型。
pck_fd = socket(PF_PACKET, int socket_type, int protocol);其中socket_type有两种类型:一种为SOCK_RAW;另一种SOCK_DGRAM。protocol:其送交的上层的协议号(如IP:0x0800),当其为hotns(ETH_P_ALL)(宏定义为0)时表示收发所有协议。(2)SOCK_RAW:它包含了MAC层头部信息的原始分组。当收到一个 SOCK...
socket.SOCK_STREAM socket.SOCK_DGRAM socket.SOCK_RAW socket.SOCK_RDM socket.SOCK_SEQPACKET 这些常量表示套接字类型,用于 socket() 的第二个参数。不同系统可能会有更多其他常量可用。(一般只有 SOCK_STREAM 和 SOCK_DGRAM 可用) socket.SOCK_CLOEXEC ...