[网络学习]--RAW,原始套接字
来源:互联网 发布:人工智能招聘岗位要求 编辑:程序博客网 时间:2024/06/05 14:44
通常情况下程序员接所接触到的套接字(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 协议的外围。
- [网络学习]--RAW,原始套接字
- 原始套接字(raw socket)
- Raw Socket(原始套接字)
- 原始套接字编程:raw socket
- Unix Socket --- 原始套接字(Raw Socket)
- 原始套接字1(Raw Socket)
- 原始套接字2(Raw Socket)
- 学习--原始套接字
- 原始套接字学习
- 基于原始套接字(raw socket)的网络抓包工具
- 基于原始套接字(raw socket)的网络抓包工具
- 网络编程原始套接字
- 网络编程原始套接字
- Windows网络编程 の 原始套接字学习笔记ICMP
- Raw Socket(原始套接字)实现Sniffer(嗅探)
- Raw Socket(原始套接字)实现Sniffer(嗅探)
- Raw Socket(原始套接字)实现Sniffer(嗅探)
- Raw Socket(原始套接字)实现Sniffer(嗅探)
- curl简记
- Git创建分支并推送到服务器具体步骤
- java泛型
- Source Insight 常用设置和快捷键大全
- Java设计模式:命令模式(Command Pattern)
- [网络学习]--RAW,原始套接字
- java中的变量
- BufferKnife的用法
- 分享一个node+ajax+h5上传文件的实例
- Arrays.asList()为什么不能支持add()和remove()
- Qt5下实现摄像头预览及捕获图像方法二(openCV3与Qt5交互使用)
- Java 介绍避免死锁的几种常见方法
- java的volatile关键字应注意的问题
- 敏捷项目管理流程-Scrum框架最全总结!