sockfd = socket(PF_PACKET, SOCK_RAW, 0); socket传入的参数含义为: 第一个参数是协议族(protocol family),还有一个相近含义的东西是地址族(address family),现在协议族和地址族基本是等价的,内核中也是简单的宏定义替换,也就是说PF_PACKET和AF_PACKET都可以作为第一个参数,表示使用的是packet协议族 第二...
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))发送接收以太网数据帧(不包括以太网头部...
SOCK_DGRAM:UDP 数据包式传输。 SOCK_RAW:原始套接字,可以处理 IPv4、ICMP、IGMP 等报文,常用于网络监听、检验新的协议或者访问新的设备。 PF_PACKET sockets(Packet Socket):基于 Device Driver(设备驱动),支持对底层数据包的捕获和注入,常用于网络安全、网络监测等场景,例如:网络嗅探、协议分析、数据包过滤等。
sock = socket(PF_PACKET, SOCK_RAW, htons(ETH_P_IP));//第三个参数可以为ETH_P_ALL ETH_P_IP ETH_P_ARP等 1. (2)接受 struct sockaddr_ll client; socklen_t addr_length = sizeof(sockaddr_ll); recvfrom(sock, buffer, 2048, 0, (sockaddr *)&client, &addr_length);//此时的地址是数据...
1.socket(AF_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(AF_INET, SOCK_PACKET, htons(ETH_P_IP|ETH_P_ARP|ETH_P_ALL))过时了,不要用啊 ...
定义一个pf_packet = socket(PF_SOCKET, SOCK_RAW, htons(ETH_P_RARP)); 就可以利用函数sendto和recefrom来读取和发送链路层的数据包了(当然,发送ARP包,上面第三个参数要变为 htons(ETH_P_ARP),或者IP的包为ETH_P_IP,可查看文件/usr/include/linux/if_ether.h文件看到所有支持的协议)。
协议簇是网络层的协议。一种是处理IP层即其上的数据,通过指定socket第一个参数为AF_INET来创建这种套接字。有两种原始套接字。另一种是处理数据链路层即其上的数据,通过指定socket第一个参数为AF_PACKET来创建这种套接字。 PF_PACKET支持SOCK_DGRAM和SOCK_RAW两种socket类型。
AF_INET和PF_INET效果相同。 l套接字类型: SOCK_STREAM、SOCK_DGRAM、SOCK_RAW、SOCK_PACKET、SOCK_SEQPACKET等 常见的2个类型的套接字: 流套接字和数据包套接字 流套接字(在某些方面类似域标准的输入/输出流)提供的是一个有序,可靠,双向字节流的连接。 提供面向连接的服务。
选 用不同的通信协议:IPPROTO_TCP:TCP (Transmission Control Protocol 传输控制协议)IPPROTO_UDP:UDP (User Datagram Protocol, 用户数据报协议)IPPROTO_ICMP:ICMP (Internet Control Message Protocol,Internet控制报文协议)
IPPROTO_TCP用tcp协议,应用有很多,如:HTTP,FTP。。。IPPROTO_UDP用udp协议。应用如:QQ,DNS。。。IPPROTO_ICMP用icmp协议。应用如:PING IP地址 要说到区别TCP比UDP安全,不会掉包。UDP速度快,容易掉包,具有广播性。虽说icmp比TCP、UDP低层一些,只是回显一下IP而以,没有太大的应用 ...