一、知识回顾:

通常情况下程序员接所接触到的套接字(Socket)为两类:

(1)流式套接字(SOCK_STREAM):一种面向连接的 Socket,针对于面向连接的TCP 服务应用;
(2)数据报式套接字(SOCK_DGRAM):一种无连接的 Socket,对应于无连接的 UDP 服务应用。

从用户的角度来看,SOCK_STREAM、SOCK_DGRAM 这两类套接字似乎的确涵盖了 TCP/IP 应用的全部,因为基于 TCP/IP 的应用,从协议栈的层次上讲,在传输层的确只可能建立于 TCP 或 UDP 协议之上,而 SOCK_STREAM、SOCK_DGRAM 又分别对应于 TCP 和 UDP,所以几乎所有的应用都可以用这两类套接字

但是,当我们面对如下问题时,SOCK_STREAM、SOCK_DGRAM 将显得这样无助:

(1)怎样发送一个自定义的 IP 包?

(2)怎样发送一个 ICMP 协议包?

(3)怎样分析所有经过网络的包,而不管这样包是否是发给自己的?

(4)怎样伪装本地的 IP 地址?

二、原始套接字概述

这使得我们必须面对另外一个深刻的主题——原始套接字(SOCK_RAW)。原始套接字广泛应用于高级网络编程,也是一种广泛的黑客手段。著名的网络sniffer(一种基于被动侦听原理的网络分析方式)、拒绝服务攻击(DOS)、IP 欺骗等都可以通过原始套接字实现。

原始套接字(SOCK_RAW)可以用来自行组装数据包,可以接收本机网卡上所有的数据帧(数据包),对于监听网络流量和分析网络数据很有作用。

原始套接字是基于 IP 数据包的编程(SOCK_PACKET 是基于数据链路层的编程)。另外,必须在管理员权限下才能使用原始套接字。

原始套接字(SOCK_RAW)与标准套接字(SOCK_STREAM、SOCK_DGRAM)的区别在于原始套接字直接置“根”于操作系统网络核心(Network Core),而  SOCK_STREAM、SOCK_DGRAM 则“悬浮”于 TCP 和 UDP 协议的外围。

流式套接字只能收发 TCP 协议的数据,数据报套接字只能收发 UDP 协议的数据,原始套接字可以收发内核没有处理的数据包。

转自:http://blog.csdn.net/tennysonsky/article/details/44655077

Linux网络编程——原始套接字能干什么?相关推荐

  1. Linux网络编程——原始套接字编程

    Linux网络编程--原始套接字编程 转自:http://blog.csdn.net/tennysonsky/article/details/44676377 原始套接字编程和之前的 UDP 编程差不 ...

  2. Linux 网络编程——原始套接字实例:MAC 地址扫描器

    如果 A (192.168.1.1 )向 B (192.168.1.2 )发送一个数据包,那么需要的条件有 ip.port.使用的协议(TCP/UDP)之外还需要 MAC 地址,因为在以太网数据包中 ...

  3. Linux原始网络编程,Linux操作系统网络编程 原始套接字 (1)

    Linux操作系统网络编程--原始套接字 (1) http://soft.zdnet.com.cn/software_zone/2007/1020/568223.shtml 我们在前面已经学习过了网络 ...

  4. Linux网络编程之套接字基础

    Linux网络编程之套接字基础 1.套接字的基本结构 struct sockaddr 这个结构用来存储套接字地址. 数据定义: struct sockaddr { unsigned short sa_ ...

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

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

  6. 【Linux网络编程】套接字简介

    00. 目录 文章目录 00. 目录 01. 概述 02. 套接字属性 03. socket函数 04. 套接字地址结构 05. 附录 01. 概述 Socket套接字由远景研究规划局(Advance ...

  7. 【Linux网络编程】套接字的介绍

    套接字是一种通信机制(通信的两方的一种约定),凭借这种机制,不同主机之间的进程可以进行通信.我们可以用套接字中的相关函数来完成通信过程. 套接字的特性有三个属性确定,它们是:域(domain),类型( ...

  8. Linux网络编程 之 套接字(四)

    目录 1. 套接字的定义 2. 套接字的创建方法 3. 套接字的地址 本地套接字 网络套接字 1. 套接字的定义 套接字是一种通信机制(通信的两方的一种约定),凭借这种机制,不同主机之间的进程可以进行 ...

  9. linux网络编程 华清,Linux网络编程之套接字

    一 :套接字属性 套接字由域(domain),类型(type)和协议(protocol)三个属性确定其特性. 1)套接字的域 域指定套接字通信中使用的网络 介质,常见的套接字域是AF_INET,它指的 ...

最新文章

  1. Lucene+Tika 文件索引的创建与搜索
  2. assign和always组合逻辑块,孰优孰劣?
  3. python3 格式化代码工具(autopep8 black)
  4. [小故事大道理] -- GoodMorning,Sir!
  5. 产品经理必知必会知识-竞品分析需求实战报告
  6. opencv cv2.flip()函数(图像翻转、镜像、颠倒)(沿x轴翻转0、沿y轴翻转【正值】、同时沿x轴y轴翻转-【负值】)
  7. 反射动态调用DLL类库测试
  8. SAP FSM 学习笔记(三) 在微信里发起SAP FSM客户预约
  9. python循环遍历所有目录_python 遍历文件夹
  10. 使用sql语句创建和删除约束示例代码
  11. 使用反射建立一个用于生产短信对象的工厂方法
  12. 修改了xml要不要重新起服务器,关于设置:Eclipse每次运行项目时都会修改server.xml(运行-在服务器上运行)...
  13. R语言CRAN软件包Meta分析 1
  14. 【华为2015暑期实习生上机题】仿照Excel的列编号
  15. pycharm 中文_环境搭建:3.pycharm社区版安装配置
  16. Julia :vscode jupyter中更新Julia kernel版本
  17. GitHub 有哪些 macOS 开源软件?
  18. 一份网站的商业计划书内容概要
  19. r语言r-shiny_如何使用R Shiny进行EDA和预测
  20. 查看是否是固态硬盘SSD

热门文章

  1. dulex包_这个堪称“最贵的包包”,竟然要用8500个杜蕾斯才买到!
  2. phpcms 会员头像h5上传_使用elementui的头像上传组件报错
  3. 显卡测试软件哪个好2018,2018年显卡评测推荐
  4. git 提交命令(附加git常用命令)
  5. oracle 创建视图
  6. js内置对象 BigInt
  7. 利用pandas找出全部的重复值
  8. E - Pairs Gym - 100935E
  9. Windows中使用命令行杀进程
  10. word页面美化设计:适当添加颜色,让文档生动起来