【Linux网络编程】原始套接字能干什么?

原创 2016年08月30日 19:44:38
通常情况下程序员接所接触到的套接字(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 协议的数据,原始套接字可以收发内核没有处理的数据包。

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

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

一、知识回顾: 通常情况下程序员接所接触到的套接字(Socket)为两类: (1)流式套接字(SOCK_STREAM):一种面向连接的 Socket,针对于面向连接的TCP 服务应用; ...

Linux网络编程:原始套接字的魔力【上】

原文地址http://blog.chinaunix.net/uid-23069658-id-3280895.html 处)折叠或打开 struct ip *ip; … ip=(struct i...

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

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

Linux网络编程:原始套接字的魔力【下】

可以接收链路层MAC帧的原始套接字        前面我们介绍过了通过原始套接字socket(AF_INET, SOCK_RAW, protocol)我们可以直接实现自行构造整个IP报文,然后对其收...

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

一、前导 通过《Linux网络编程——原始套接字编程》得知,我们可以通过原始套接字以及 recvfrom( ) 可以获取链路层的数据包,那我们接收的链路层数据包到底长什么样的呢? ...

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

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

Linux 网络编程——原始套接字实例:发送 UDP 数据包

IP报头

Linux网络编程:原始套接字的魔力【上】

原文出处 基于原始套接字编程        在开发面向连接的TCP和面向无连接的UDP程序时,我们所关心的核心问题在于数据收发层面,数据的传输特性由TCP或UDP来保证:        也就...
  • lxhjjz
  • lxhjjz
  • 2012年08月28日 09:29
  • 533

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

以太网报文格式: 详细的说明,请看《MAC 头部报文分析》。 IP 报文格式: 详细的说明,请看《IP 数据报格式详解》。 ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:【Linux网络编程】原始套接字能干什么?
举报原因:
原因补充:

(最多只允许输入30个字)