linux服务器开发相关视频解析:
100行代码弄定用户态协定栈文章源自微观生活(93wg.com)微观生活-https://93wg.com/22187.html
10道经典面试题的剖析, 技术方向怎么抉择职业方向|c/c++|linux文章源自微观生活(93wg.com)微观生活-https://93wg.com/22187.html
一、原始套接字能干什么?文章源自微观生活(93wg.com)微观生活-https://93wg.com/22187.html
这使得咱们必需面对此外一个深入的主题——原始套接字(SOCK_RAW)。文章源自微观生活(93wg.com)微观生活-https://93wg.com/22187.html
流式套接字只能收发 TCP 协定的数据,数据报套接字只能收发 UDP 协定的数据,原始套接字可以收发内核没有处理的数据包。二、原始套接字编程 原始套接字编程以及以前的UDP 编程差不多,不过就是创立一个套接字后,通过这个套接字接管数据或者发送数据。区分在于,原始套接字可以自行组装数据包(假装本地 IP,本地 MAC),可以接管本机网卡上所有的数据帧(数据包)。此外,必需在管理员权限下才能使用原始套接字。文章源自微观生活(93wg.com)微观生活-https://93wg.com/22187.html
原始套接字的创立:文章源自微观生活(93wg.com)微观生活-https://93wg.com/22187.html
参数:文章源自微观生活(93wg.com)微观生活-https://93wg.com/22187.html
返回值:文章源自微观生活(93wg.com)微观生活-https://93wg.com/22187.html
实例如下:文章源自微观生活(93wg.com)微观生活-https://93wg.com/22187.html
// 所需头文件 文章源自微观生活(93wg.com)微观生活-https://93wg.com/22187.html
ssize_t recvfrom( int sockfd, void *buf, size_t nbytes, int flags, struct sockaddr *from, socklen_t *addrlen );
参数:
返回值:
实例如下:
默许的情况下,咱们接管数据,目的地址是本地地址,才会接管。有时候咱们想接管所有经由网卡的所有数据流,而不论其目的地址是不是是它,这时候候咱们需要设置网卡为混杂模式。 网卡的混杂模式一般在网络管理员分析网络数据作为网络故障诊断手腕时用到,同时这个模式也被网络黑客应用来作为网络数据窃听的入口。在 Linux 操作系统中设置网卡混杂模式时需要管理员权限。在 Windows 操作系统以及 Linux 操作系统中都有使用混杂模式的抓包工具,比如著名的开源软件 Wireshark。 通过命令给 Linux 网卡设置混杂模式(需要管理员权限)123
设置混杂模式:ifconfig eth0 promisc
取缔混杂模式:ifconfig eth0 -promisc
通过代码给 Linux 网卡设置混杂模式
核心代码如下:
struct ifreq ethreq; //网络接口地址 strncpy(ethreq.ifr_name, &
ssize_t sendto( int sockfd,const void *buf, size_t nbytes,int flags, const struct sockaddr *to,socklen_t addrlen );
参数:
返回值:
发送完全代码如下:struct sockaddr_ll sll; //原始套接字地址结构 struct ifreq ethreq; //网络接口地址 strncpy(ethreq.ifr_name, &
unsigned char msg[1024] = { //--------------组MAC--------14------ 0xb8, 0x88, 0xe3, 0xe1, 0x10, 0xe6, // dst_mac: b8:88:e3:e1:10:e6 0xc8, 0x9c, 0xdc, 0xb7, 0x0f, 0x19, // src_mac: c8:9c:dc:b7:0f:19 0x08, 0x00, // 类型:0x0800 IP协定 // …… …… // …… …… };
接管的链路层数据包,并对其进行简单分析:
以上就是微观生活(93wg.com)关于“Linux网络编程:原始套接字编程及实例分析”的详细内容,希望对大家有所帮助!
评论