一、原始套接字概述

原始套接字(SOCK_RAW)

概述:
1、一种不同于SOCK_STREAM、SOCK_DGRAM的套接字,它实现于系统核心。
2、可以接收本机网卡上的所以数据帧(数据包),对于监听网络流量和分析网络数据很有作用。
3、开发人员可发送自己组装的数据包到网络上。
4、广泛应用与高级网络编程。
5、网络专家、黑客通常用此来编写奇特的网络程序

三种套接字对比:
①流式套接字只能收发TCP协议的数据。
②数据包套接字只能收发UDP协议的数据。
③原始套接字可以收发
内核没有处理的数据包,因此要访问其他协议。
发送的数据需要使用,原始套接字(SOCK_RAW)

二、创建原始套接字

需要sudo运行

int socket(PF_PACKET, SOCK_RAW, protocol);

功能:创建链路层的原始套接字。

参数:
protocol:指定可以接收或发送的数据包类型。
ETH_P_IP:IPv4数据包。
ETH_P_ARP:ARP数据包。
ETH_P_ALL:任何协议类型的数据包。

返回值:
成功(>0):链路层套接字
失败(<0):出错

三、数据包分析

使用原始套接字进行编程开发时,首先要对不同的数据包进行学习,需要手动对IP、TCP、UDP、ICMP等包头进行组装或者拆解

ubuntu中描述网络协议结构的文件如下:

在TCP/IP协议栈中的每一层为了能够正确解析出上层的数据包,从而使用一些**“协议类型”**来标记,详细如下图:

1、UDP封包格式

2、IP封包格式

3、Ethernet封包格式

4、TCP封包格式

5、ICMP封包格式

原始套接字和报文格式相关推荐

  1. 【Linux网络编程】原始套接字实例:MAC 头部报文分析

    通过<Linux网络编程--原始套接字编程>得知,我们可以通过原始套接字以及 recvfrom( ) 可以获取链路层的数据包,那我们接收的链路层数据包到底长什么样的呢? MAC 头部(有线 ...

  2. Linux原始套接字学习总结

    Linux网络编程:原始套接字的魔力[上] http://blog.chinaunix.net/uid-23069658-id-3280895.html 基于原始套接字编程        在开发面向连 ...

  3. Raw_Socket原始套接字

    一.创建raw socket的权限:只有root权限才能够创建. 二.raw socket的用途:主要有三个方面 (1):通过raw socket来接收发向本机的ICMP,IGMP协议包,或者用来发送 ...

  4. 002.ICMP--拼接ICMP包,实现简单Ping程序(原始套接字)

    一.大致流程: 将ICMP头和时间数据设置好后,通过创建好的原始套接字socket发出去.目的主机计算效验和后会将数据原样返回,用当前时间和返回的数据结算时间差,计算出rtt. 二.数据结构: ICM ...

  5. 【Linux网络编程】原始套接字实例:发送 UDP 数据包

    以太网报文格式: 详细的说明,请看<MAC 头部报文分析>. IP 报文格式: 详细的说明,请看<IP 数据报格式详解>. UDP 报文格式: 详细的说明,请看<UDP ...

  6. 原始套接字与sniffer

    原始套接字与sniffer 2009-05-11 23:40:30 分类: LINUX 下面是原文件附的代码.我运行过,很好. 文件: source.rar 大小: 7KB 下载: 下载 今天从网上看 ...

  7. linux sock_raw原始套接字编程

    sock_raw原始套接字编程可以接收到本机网卡上的数据帧或者数据包,对与监听网络的流量和分析是很有作用的.一共可以有3种方式创建这种socket   1.socket(AF_INET, SOCK_R ...

  8. linux串口编程实例_Linux 网络编程——原始套接字实例:发送 UDP 数据包

    以太网报文格式: IP 报文格式: UDP 报文格式: 校验和函数: /*******************************************************功能:校验和函数参 ...

  9. Teardrop原始套接字编程

    目录 一.含义介绍 二.Teardrop代码编程 参考 一.含义介绍 1.什么是原始套接字 原始套接字的含义就是在传输层之下使用的套接字,它提供了一些 TCP 和 UDP 套接字无法提供的功能,即: ...

最新文章

  1. MySql 查询表字段数
  2. 聊聊Spring事务失效的12种场景,太坑人了
  3. Windows 比 Linux 好?我有 13 个反对理由
  4. Windows Phone 7范例游戏Platformer实战5——多点触控编程
  5. Linux下rm -rf 后恢复文件
  6. 飞机大战-控制飞机左右移动二
  7. Spark SQL(三)之视图与执行SQL
  8. 天正坐标标注显示不全_广联达导入CAD图纸不显示怎么办?
  9. 当点击ListView的列头时,对ListView排序
  10. 【Linux】面试常问的 25+ 个 Linux 命令
  11. nyoj936蚂蚁的难题(X)
  12. unity串口 连接多个串口崩溃_必学DB9串口+3种连接方式
  13. 文本文档怎么改格式html,文本文档怎么显示txt-文本文档怎么改格式
  14. 个人知识管理系统思源笔记
  15. Unity-瓦片地图详解
  16. 手机格式化的计算机原理,格式化不了怎么办 手机电脑方法大不同【图解】
  17. iframe中碰到的问题及解决方法
  18. woed未响应文件没保存,解决办法
  19. 【算法】Sunday算法(模式匹配)
  20. 1556_AURIX_TC275_复位系统控制单元

热门文章

  1. 入门理解H264编码
  2. bootstrap如何设置表格居中
  3. 从平凡到优秀的思维与习惯养成
  4. MySQL命令行下载安装配置——详细教程
  5. linux无线wps连接wifi,不好意思问Wifi密码?不用密码QSS/WPS连接Wifi教程
  6. 怎么编辑图片大小?图片如何调整尺寸大小?
  7. MATLAB中如何设置图片大小?
  8. 三星 S4 手机误删除相片(相册)后的恢复问题,仅记录处理过程,其它Android手机同样适用...
  9. 开源 android
  10. 主机与虚拟机的网络联通常见问题及解决方案