博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Linux网络编程——原始套接字能干什么?
阅读量:4635 次
发布时间:2019-06-09

本文共 1001 字,大约阅读时间需要 3 分钟。

  通常情况下程序员接所接触到的套接字(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 协议的数据,原始套接字可以收发内核没有处理的数据包。

 

转自:

转载于:https://www.cnblogs.com/tennysonsky/p/4382902.html

你可能感兴趣的文章
GitHub上整理的一些工具【转载】
查看>>
jenkins ssl证书报错问题解决
查看>>
《BI项目笔记》用Excel2013连接和浏览OLAP多维数据集
查看>>
C语言对mysql数据库的操作
查看>>
SQL Server 数据库备份
查看>>
INNO SETUP 获得命令行参数
查看>>
http编程学习(C#)
查看>>
DNN 数据访问策略 (转)
查看>>
Sublime Text 自动换行
查看>>
mybatis逆向工程配置文件怎么再偷懒(懒出天际)
查看>>
hdu1160FatMouse's Speed(DP)
查看>>
Codeforces Round #228 (Div. 1)B
查看>>
poj2420A Star not a Tree?(模拟退火)
查看>>
switch case
查看>>
crash
查看>>
ASP.NET MVC 4 (十三) 基于表单的身份验证
查看>>
day3----编码-集合-深浅copy-文件操作-函数初识
查看>>
linux下find命令的使用和总结
查看>>
数据结构-线性表的顺序结构
查看>>
微信第三方平台开发 - 常见问题汇总
查看>>