Linux网络编程:原始套接字编程及实例分析(一)
来源:互联网 发布:手机淘宝团购在哪 编辑:程序博客网 时间:2024/05/01 07:13
原文出处:http://network.51cto.com/art/201503/470400.htm 如有侵权,请及时告知,将第一时间处理!
======================================================================================================================================
原始套接字编程和之前的UDP 编程差不多,无非就是创建一个套接字后,通过这个套接字接收数据或者发送数据。区别在于,原始套接字可以自行组装数据包(伪装本地 IP,本地 MAC),可以接收本机网卡上所有的数据帧(数据包)。另外,必须在管理员权限下才能使用原始套接字。
======================================================================================================================================
一、原始套接字能干什么?
通常情况下程序员接所接触到的套接字(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网络编程:原始套接字编程及实例分析(一)
- Linux网络编程:原始套接字编程及实例分析
- Linux网络编程:原始套接字编程及实例分析
- Linux网络编程:原始套接字编程及实例分析(二)
- Linux网络编程:原始套接字编程及实例分析(3)
- 【Linux网络编程】原始套接字编程
- 【Linux网络编程】原始套接字实例:MAC 地址扫描器
- 【Linux网络编程】原始套接字实例:发送 UDP 数据包
- Linux网络编程——原始套接字实例:MAC 头部报文分析
- Linux网络编程——原始套接字实例:MAC 头部报文分析
- 【Linux网络编程】原始套接字实例:MAC 头部报文分析
- Linux网络编程:原始套接字编程(上)
- Linux网络编程:原始套接字编程(下)
- Linux网络编程:10. 原始套接字
- Linux网络编程:原始套接字
- Linux网络编程: 原始套接字
- Linux网络编程: 原始套接字
- Linux 网络编程之原始套接字
- spingMVC之国际化
- 血色西晋读书杂记
- 安卓学习笔记
- HDFS原理解析(总体架构,读写操作流程及源码查看等)
- GDB调试器使用总结
- Linux网络编程:原始套接字编程及实例分析(一)
- PaintCode 教程:矢量图轻松转换成CoreGraphics代码
- docker添加多网卡
- 六一儿童节就要过去了,您是否因为工作忙绿而没办法陪孩子玩
- 支付宝网银支付接口
- 实现医生工作站的辅助检查功能的代码(七)
- ls -l各个位置详解
- lucene3.6.0 经典案例 入门教程
- 做了一个噩梦,梦见你离开,我从哭泣中醒来