要注意当 SYN 封包发往目标 Web 服务器的 TCP 端口 80,并且该端口上运行了 HTTP 服务时,响应中会带有 TCP 标识 SA 的值,这表明 SYN 和 ACK 标识都被激活 。这个响应表明特定的目标端口是开放的,并接受连接 。如果相同类型的封包发往不接受连接的端口 , 会收到不同的请求 。
当 SYN 请求发送给关闭的端口时,返回的响应中带有 TCP 标识 RA,这表明 RST 和 ACK 标识为都被激活 。ACK 为仅仅用于承认请求被接受,RST 为用于断开连接,因为端口不接受连接 。作为替代,如果 SYN 封包发往崩溃的系统,或者防火墙过滤了这个请求,就可能接受不到任何信息 。由于这个原因 , 在 sr1 函数在脚本中使用时,应该始终使用 timeout 选项,来确保脚本不会在无响应的主机上挂起 。
如果函数对无响应的主机使用时, timeout 值没有指定,函数会无限继续下去 。这个演示中 , timout 值为 1秒,用于使这个函数更加完备,响应的值可以用于判断是否收到了响应:
Python 的使用使其更易于测试变量来识别 sr1 函数是否对其复制 。这可以用作初步检验,来判断是否接收到了任何响应 。对于接收到的响应,可以执行一系列后续检查来判断响应表明端口开放还是关闭 。这些东西可以轻易使用 Python 脚本来完成,像这样:
在这个 Python 脚本中,用于被提示来输入 IP 地址,脚本之后会对定义好的端口序列执行 SYN 扫描 。脚本之后会得到每个连接的响应,并尝试判断响应的 SYN 和 ACK 标识是否激活 。如果响应中出现并仅仅出现了这些标识,那么会输出相应的端口号码 。
运行这个脚本之后,输出会显示所提供的 IP 地址的系统上,前 100 个端口中的开放端口 。
这一类型的扫描由发送初始 SYN 封包给远程系统的目标 TCP 端口,并且通过返回的响应类型来判断端口状态来完成 。如果远程系统返回了 SYN+ACK 响应,那么它正在准备建立连接,我们可以假设这个端口开放 。如果服务返回了 RST 封包,这就表明端口关闭并且不接收连接 。此外,如果没有返回响应,扫描系统和远程系统之间可能存在防火墙,它丢弃了请求 。这也可能表明主机崩溃或者目标 IP 上没有关联任何系统 。
Nmap 拥有可以执行远程系统 SYN 扫描的扫描模式 。这个秘籍展示了如何使用 Namp 执行 TCP 隐秘扫描 。
为了使用 Nmap 执行 TCP 隐秘扫描,你需要一个运行 TCP 网络服务的远程服务器 。这个例子中我们使用 Metasploitable2 实例来执行任务 。配置 Metasploitable2 的更多信息请参考第一章中的“安装 Metasploitable2”秘籍 。
就像多数扫描需求那样,Nmap 拥有简化 TCP 隐秘扫描执行过程的选项 。为了使用 Nmap 执行 TCP 隐秘扫描,应使用 -sS 选项,并附带被扫描主机的 IP 地址 。
在提供的例子中,特定的 IP 地址的 TCP 80 端口上执行了 TCP 隐秘扫描 。和 Scapy 中的技巧相似 , Nmap 监听响应并通过分析响应中所激活的 TCP 标识来识别开放端口 。我们也可以使用 Namp 执行多个特定端口的扫描,通过传递逗号分隔的端口号列表 。
在这个例子中,目标 IP 地址的端口 21、80 和 443 上执行了 SYN 扫描 。我们也可以使用 Namp 来扫描主机序列,通过标明要扫描的第一个和最后一个端口号 , 以破折号分隔:
在所提供的例子中,SYN 扫描在 TCP 20 到 25 端口上执行 。除了拥有指定被扫描端口的能力之外 。Nmap 同时拥有配置好的 1000 和常用端口的列表 。我们可以执行这些端口上的扫描 , 通过不带任何端口指定信息来运行 Nmap:
在上面的例子中,扫描了 Nmap 定义的 1000 个常用端口,用于识别 Metasploitable2系统上的大量开放端口 。虽然这个技巧在是被多数设备上很高效 , 但是也可能无法识别模糊的服务或者不常见的端口组合 。如果扫描在所有可能的 TCP 端口上执行 , 所有可能的端口地址值都需要被扫描 。定义了源端口和目标端口地址的 TCP 头部部分是 16 位长 。并且,每一位可以为 1 或者 0 。因此,共有 2 ** 16 或者 65536 个可能的 TCP 端口地址 。对于要扫描的全部可能的地址空间,需要提供 0 到 65535 的端口范围,像这样:
推荐阅读
- 幼儿园益智区游戏区图片,幼儿园益智区图画
- linux黑客炫酷命令,linux 黑客系统
- linux命令df.,linux命令df
- php多维数据 php遍历显示多维数组
- 战争拍摄最忌讳什么,战争拍戏现场视频
- 开发游戏人生,游戏人生主角说游戏开始的那一段
- 电脑视频要什么设备打开,电脑开启视频
- c语言线程回调函数 c多线程函数返回值有什么用
- c语言求数组中第二小的值,c语言求数组中第二小的值