渗透&&探测 (之UDP探测篇)

UDP协议

  撸完了TCP,天然要来撸一下UDP算法

  UDP 协议,即 用户数据报协议User Datagram Protocol),是一个简单的 面向数据报传输层 协议。缓存

  咱们能够将UDP协议看做IP协议 暴露传输层 的一个 接口网络

  UDP 协议一样以 数据包(datagram)的方式传输,它的传输方式也是Best Effort的,因此UDP协议也是不可靠的(unreliable)。socket

  那么,咱们为何不直接使用IP协议而要额外增长一个UDP协议呢?3d

  一个重要的缘由是IP协议中并无 端口(port)的概念。IP协议进行的是IP地址到IP地址的传输,这意味者两台计算机之间的对话。但每台计算机中须要有 多个通讯通道,并将 多个通讯通道 分配给 不一样的进程 使用。一个端口 就表明了这样的一个 通讯通道UDP协议实现了 端口,从而让 数据包 能够在送到IP地址的基础上,进一步能够送到 某个端口code

UDP依然不是那么“可靠”

  尽管UDP协议很是 简单,但它的产生 晚于 更加 复杂TCP协议。orm

  早期的网络开发者开发出IP协议和TCP协议分别位于 网络层传输层,全部的通讯都要先通过TCP封装,再通过IP封装(应用层->TCP->IP)。cdn

  开发者将TCP/IP视为相互合做的 套装。但很快,网络开发者发现,IP协议的功能和TCP协议的功能是相互 独立 的。blog

  对于一些简单的通讯,咱们只须要Best Effort式的IP传输就能够了,而不须要TCP协议复杂的创建链接的方式(特别是在 早期 网络环境中,若是 过多 的创建TCP链接,会形成很大的网络 负担,而UDP协议能够相对快速的处理这些简单通讯)。接口

  UDP 协议随之被开发出来,做为IP协议在 传输层傀儡。这样,网络通讯能够经过 应用层->UDP->IP 的封装方式,绕过TCP协议。

UDP报文

udp
   UDP 的数据包一样分为 头部( header)和 数据 ( payload)两部分。

  UDP 是传输层(transport layer)协议,这意味着UDP的数据包须要通过IP协议的封装(encapsulation),而后经过IP协议传输到 目的电脑。随后UDP包在目的电脑拆封,并将信息送到 相应端口 的缓存中。

  • UDP协议的头部
    1. source port
      UDP 包的出发端口

    2. destination port
      目的地端口

    3. Length
      整个 UDP 包的长度。

    4. checksum
      它的算法与IP协议的header checksum算法相相似。
      然而,UDPchecksum所校验的序列包括了 整个UDP数据包,以及封装的IP头部的一些信息(主要为出发地IP和目的地IP)。
      这样,checksum就能够 校验IP:端口 的正确性了。
      IPv4中,checksum能够为 0,意味着 不使用 checksum。IPv6要求必须进行checksum校验。

socket

  端口(port)是伴随着 传输层 诞生的概念。它能够将 网络层IP通讯分送到 各个通讯通道

  UDP 协议和TCP协议尽管在工做方式上有很大的不一样,但它们都创建了 从一个端口到另外一个端口的通讯

socket

  一个特定的IP和特定的 端口 就构成了一个socket

UDP主要特色

  1. 无链接的
    发送数据以前 不须要创建链接,减小了开销和发送数据以前的时延。

  2. 尽最大努力交付
    不保证可靠的交付,主机 不须要 维持复杂的连接状态表。

  3. 面向报文的
    发送方的UDP对应用程序交下来的报文,在添加首部后就向下交付给IP层。
    不拆分,也 不合并,而是 保留 这些报文的 边界
    所以,应用程序须要选择 合适 的报文 大小

  4. 没有拥塞控制。

  5. 支持一对1、多对一和多对多的交互通讯。

  6. 首部开销小,只有8个字节。

UDP端口探测

  UDP 端口扫描比较麻烦,它同TCP不同,由于它不须要创建链接。
  咱们向 目标主机 的固定端口发送UDP数据包,能够获得 两种结果

  1. 端口开了
    UDP 不会给咱们任何回复,没办法,谁叫人家是 无链接的
  2. 端口没开 目标主机端口会给咱们回复ICMPport-unreachable 响应

  那么,咱们就能够coding,大部分同TCP探测:

  1. 构造一系列目标端口的UDP

  2. 经过第二层的sr发送而且接收返回的包

  3. 遍历接收的包,判断是否目标端口有ICMP回复包,此端口就为没有开放端口

  4. 经过遍历的全部端口集合和不开放端口集合作差集,就能获得全部开放端口的集合

  整个代码就是:

  扫描发现对方主机 88 号端口开放:

  愿意与你们分享交流各类技术,我的公众帐号[mindev],以及 知识星球[ 极客世界 ]

geeker
        欢迎订阅公众帐号,日更哟~~~
相关文章
相关标签/搜索