原始套接字 IP_HDRINCL_chengqian7320的博客-程序员宅基地

技术标签: 网络  

原始套接字可以访问ICMP和ICMP等协议包,可以读写内核不处理的IP数据包。可以创建自定义的IP数据包首部。一句话,使用原始套接字可以

  编写基于IP协议的通讯程序。

  1.创建原始套接字具体格式如下:int sockfd;sockfd = socktet(AF_INET, SOCK_RAW, IPPROTO_ICMP);第一个参数:协议族 AF_INET 代表TCP/IP协议第二个参数:SOCKET类型第三个参数:协议类型注意:@如果指定协议为0时,原始套接字可以接收内核传递给原始套接字的任何IP数据包,且只有超级用户才可以创建原始套接字。

  @当需要编写自己的IP数据包首部时,可以在原始套接字上设置套接字选项IP_HDRINCL.在不设置这个选项的情况下,IP协议自动填充IP数据包的首部。

  int on = 1;if(setsockopt(sockfd, IPPROTO_IP, IP_HDRINCL, &on, sizeof(on)) < 0)

  { fprintf(stderr, "setsockopt IP_HDRINCL ERROR! /n");exit(1);}

  原始套接字直接使用IP协议的套接字,所以是非面向连接的。在这个套接字上可以调用connect和bind函数,分别执行绑定对方和本地地址。

  说明:

  bind函数:调用bind函数后,发送数据包的源IP地址将是bind函数指定的地址。如是不调用bind,则内核将以发接口的主IP地址填充。如果设置了IP_HDRINCL,那么必须手工填充每个发送数据包的源IP地址。

  connetc函数:调用connect函数后,可以用write和send发送数据包。内核将用这个绑定的地址填充IP数据包的目的IP地址。

  发送数据包

  使用原始套接字发送数据包必须遵循以下规则:1.如果没有用connect函数绑定对方地址时,则应使用sendto或sendmsg函数发送数据包,在函数参数中指定对方地址。如?饔昧薱onnect函数,则可以直接使用send,write或writev来发送数据包。

  2.如果没有设置IP_HDRINCL选项时,包内可写的内容为数据部分,内核将自动创建IP首部。如果设置了IP_HDRINCL选项,则包内要填充的内容为IP数据包和首部。内核只负责填充下面两个域:。如果将IP数据包的标识域设置为0,内核将设置这个域。内核总是计算和填充IP数据包首部的校验和。

  注意:IP数据包首部各个域的内容都是网络字节顺序。

  接收数据包

  内核遵循以下规则接收数据包:1.UDP和TCP数据包从不传送给一个原始套接字。如果要查看这两类数据包,只能通过直接访问数据链路层来实现。

  2.大多数ICMP数据包的一个拷贝传送给匹配的原始套接字。

  3.内核处理的所有其它类型的数据包的一个拷贝都传给匹配的原始套接字。

  4.所有内核不能识别的协议类型的IP数据包都传送给匹配的原始套接字。对于这些IP数据包,内核只做必要的检验工作。

  在将一个IP数据包传送给原始套接字之前,内核需要选择匹配的原始套接字1.数据包的协议域必须与接收原始套接字的协议类型匹配。

  2.如果原始套接字调用了bind函数绑定了本地IP地址,那么到达的IP数据包的源IP地址必须和对方的IP相匹配。

  3.如果原始套接字调用connect函数指定了对方的IP地址,则到达的IP数据包的源IP地址秘须与这它相同

转载于:https://my.oschina.net/u/1777508/blog/3099566

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/chengqian7320/article/details/100835178

智能推荐

【蓝桥杯省赛真题20】Scratch哆啦A梦竹蜻蜓 少儿编程scratch蓝桥杯省赛真题讲解_小兔子编程的博客-程序员宅基地_竹蜻蜓scratch

scratch哆啦A梦竹蜻蜓一、题目要求1、编程实现 竹蜻蜓是动画角色哆啦A梦的一个常用道具 戴在头上可以通过大脑意念随意控制飞行 2、具体要求 点击绿旗,哆啦A梦出现在地面上,舞台左上角显示能量值100 按下空格键,竹蜻蜓旋转,多啦A梦上升,同时能量开始减少(参考值:满能量状态下,小猫能飞行5秒左右) 松开空格键,竹蜻蜓停止旋转,哆啦A梦缓慢下降,指导落到地面上 在上升中,还要注意能量值是否为0,如果能动变为0,哆啦A梦也要缓慢下降

服务器 python cant open file_Fatal Python error: Cannot recover from stack overflow_weixin_39661881的博客-程序员宅基地

Hi, I'm use the Sanic develpoment a web api . but get error when i use wrk to connection the server.2016-12-27 14:57:31,971: INFO: Goin' Fast @ http://0.0.0.0:80002016-12-27 14:58:22,665: WARNING: Exe...

javascript禁用Backspace退格键(结合自己实际应用中遇到的textarea中退格造成页面假死问题做了修改)_中草药代码的博客-程序员宅基地_js禁止backspace

javascript禁用Backspace退格键今天有个新需求,要求在窗口中编辑的时候禁用掉退格键,因为退格键会发生页面后退的动作,编辑的时候非常不便.在网上搜索了一下,有两种方法,最后决定采用这位仁兄的方法,见http://volunteer521.iteye.com/blog/830522,这是其根据第一种方法做的改良,但是发现还是存在bug,最后做解释!这

Ubuntu20.04安装搜狗输入法的详细步骤_发狂的蜗牛的博客-程序员宅基地_ubuntu20 搜狗输入法

1.安装Fcitx输入框架相关的依赖库和框架都会自动安装上 1 2 sudo apt install fcitx-bin sudo apt-get install fcitx-table 2.下载Linux版本搜狗输入法(搜狗输入法官网中根据自己情况选择32位和64位)然后进入相应的下载目录,进行安装(安装过程中如果有错,运行sudo apt --fix-broken install,删除安装,重新开始) 1

USB3.0  Type-c 拆解_jiangbeicaizi000的博客-程序员宅基地

转自:http://www.chongdiantou.com/wp/archives/6341.html新出的手机大部分都是Type-c,预计接下来是Type-c大热,线材当然要跟上,Type-c的优点不分正反,可以过数据影视频,最大20V5A  100W的电流能力Type-c又分很多种,对于四线的USB2.0数据拷贝会收到限制,USB-3.0的 type-C 3.1充电的同时可以提供高速数...

FreeNAS搭建ISCSI存储与Vmware vsphere ESXI成功对接_weixin_33682790的博客-程序员宅基地

用到的软件:最新FreeNAS8.04版 Vsphere ESXI5.0版FreeNAS的安装,我不多说,相信大家都会。这里只截一张安装成功的图,谨此证明我成功安装了FreeNAS之后,就在浏览器的地址栏里输入上面FreeNAS的地址:192.168.18.146,进入FreeNAS的配置界面:之后就是更改语言,更改密码等,这些简单的就略过吧。...

随便推点

网络摄像头 接口协议 ONVIF,PSIA,CGI,ISAPI_hoyjam1的博客-程序员宅基地

ONVIF致力于通过全球性的开放接口标准来推进网络视频在安防市场的应用,这一接口标准将确保不同厂商生产的网络视频产品具有互通性。2008年11月,论坛正式发布了ONVIF第一版规范——ONVIF核心规范1.0。随着视频监控的网络化应用,产业链的分工将越来越细。有些厂商专门做摄像头,有些厂商专门做DVS,有些厂商则可能专门做平台等,然后通过集成商进行集成,提供给最终客户。这种产业合作模式,已经迫切的

毕业论文格式系列---1.论文公式编号_dr_theodore的博客-程序员宅基地_论文公式编号

毕业论文系列---1.论文公式编号20200508,中午刚交过论文初稿,想到排版时的煎熬,故来此记录一下 希望能给需要的人提供一些帮助毕业论文公式的格式一般要求:公式居中,编号居右,编号以章节划分,如2-1第一步,加编号。mathtype编辑的公式,右键单击加题注,有些需要自己新建题注标签。括号我是自己加的,有更好的方法不吝赐教。第二步,创建公式样式在样式区域点击倒三角选择 创建样式编辑样式名称,单击修改在左下角选择 格式 --- 制表位...

spark与kafka的交互_dddddssssa的博客-程序员宅基地

spark和kafka的事情spark如何与kafka的连接Driver端和Executor端都分别作了什么偏移量是怎么管控的spark如何与kafka的连接本文采用的是Driect连接方式,KafkaUtils.createDirectStream开连接kafka,调用时可以看到两个createDirectStream方法,参数不同,最终都是通过new DirectKafkaInputDStream[K, V](ssc, locationStrategy, consumerStrategy, perP

计算机网络【四】数据链路层基本概念+点到点通信(PPP协议)_月本_诚的博客-程序员宅基地_链路层是点到点

数据链路层基本概念路由器是网络层设备数据链路层:数据管道,传输的是数据包加上发送地址,接收地址,校验的数据帧数据链路层的信道类型:点到点信道:使用一对一的点到点通信方式(两个设备之间直接使用网线相连)广播信道:使用一对多的广播信道方式,因此过程比较复杂。广播信道上连接的主机很多,因此必须使用专用的共享信道协议来协调这些主机的数据发送链路:一条点到点的物理线路段,中间没有其他交换节...

CONMISANMA的正确答案——JAVA添加托盘图标和托盘弹出式菜单【仿WINDOWS网络连接】_Conmi·白小丑的博客-程序员宅基地

转载自:JAVA添加托盘图标和托盘弹出式菜单测试JDK:1.8测试系统:WIN2016如果要引用MAIN包目录下的图片,类名.class.getResource(&quot;图片.png&quot;);最好是16*16的图片,直接修改后缀是无法使用的!!最好是16*16的图片,直接修改后缀是无法使用的!!最好是16*16的图片,直接修改后缀是无法使用的!!我使用的是...

count(*) 与count(1)的效率_dengyiyu5280的博客-程序员宅基地

使用count(*) 与count(1)的效率,大部分是count(1)效率高,count(*)效率低,具体原因待查[email protected]:~&gt; time db2 "select count(*) from OT_JNL_VERIFY"1 ----------- 225919230 1 record(s) selecte...

推荐文章

热门文章

相关标签