Linux网络编程:原始套接字编程及实例分析

小微 科技Linux网络编程:原始套接字编程及实例分析已关闭评论100字数 1326阅读模式
摘要linux服务器开发相关视频解析:100行代码搞定用户态协议栈10道经典面试题的剖析, 技术方向如何决定职业方向|c/c++|linux一、原始套接字能干什么?这使得我们必须面对另...

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网络编程:原始套接字编程及实例分析”的详细内容,希望对大家有所帮助!

继续阅读
 
小微
  • 版权声明: 本文部分文字与图片资源来自于网络,转载此文是出于传递更多信息之目的,若有来源标注错误或侵犯了您的合法权益,请立即通知我们(管理员邮箱:81118366@qq.com),情况属实,我们会第一时间予以删除,并同时向您表示歉意,谢谢!
  • 转载请务必保留本文链接:https://93wg.com/22187.html