主机发现和端口扫描的基本原理和步骤 · clubsk

主机发现和端口扫描的基本原理和步骤

一、有nmap,nmap --help:帮助文件

1.主机发现

  • sudo nmap -sn 网段.0/24

2.端口扫描

  • sudo nmap --min-rate 10000 -p- 目标IP :不遗漏,扫两遍
  • sudo nmap -sU --min-rate 10000 -p- 目标IP: 看是否遗漏UDP的扫描
  • sudo nmap -sT -sV -0 -p开放的端口 目标IP: 明确用TCP来扫扫描,看版本信息,操作系统
  • sudo nmap --script=vuln -p:漏洞扫描

二、没有nmap

1.主机发现

  • for i in {1..254};do ping -c 1 -W 1 $i;done:这里对该网段下的全部IP进行扫描,很明显有254组结果,读起来会非常费劲,怎么办呢
  • 所以要筛选,通过看自己的Kali所在网段,先把这个范围缩小,然后去找字符特征,发现ping成功的有一个from
  • for i in {1..254};do ping -c 1 -W 1 $i | grep from;done:加入特征字符

2.端口扫描

2.1用nc

  • nc.traditional -vv -z 目标IP 80-110 : 先取样本,虽然不知道有没有开放,但为了找字符特征(也可以用自己的Kali,只要能找到)。-vv表示详细模式,-z表示快速扫描,不发送数据
  • nc.traditional -vv -z 目标IP 1-65535 | grep -v refused :发现个别open,大部分refused,-v表示反向匹配。仍然不行,为什么?

    在 Linux 系统中,程序的输出分为“标准输出”(1,比如命令执行成功的结果)和“标准错误”(2,比如“连接失败”、“权限不足”等报错信息)。 默认情况下,管道符 | 只能传递“标准输出”。但是 Netcat 把“端口已连接(open)”和“端口被拒绝(refused)”等信息都打印在了“标准错误”里。

  • nc.traditional -vv -z 目标IP 1-65535 2>&1 | grep -v refused : 2>&1 的作用是:把“标准错误”的输出,合并到“标准输出”里。这样,接下来的管道符才能抓取到这些连接状态的文本信息。

2.2用伪设备(文件模拟设备)

  • 第一步切换到bash
  • for i in {1..65535};do(echo < /dev/tcp/目标IP/$i);done:这里是用echo去触发第$i号的tcp连接echo < /dev/tcp/目标IP/$i,并且用到一个bash循环结构for i in {1..65535};do...;done,加括号是因为后面还有更复杂的语句😭
  • for i in {1..65535};do(echo < /dev/tcp/目标IP/$i) &>dev/null && printf "\nThe open port is %d\n" "$i" | grep -v refused;done :&&的意思是只有左边命令执行成功了,右边才执行;&.dec/null则过滤了拒绝的;| grep -v refused是对已经出来的数据过滤,也可以不用
  • 还可以优化一下for i in {1..65535};do(echo < /dev/tcp/目标IP/$i) &>dev/null && printf "\nThe open port is %d\n" "$i" || printf "~" :这样没有开放的端口会显示~

三、夹杂的知识

  • 先ctrl加z,在kill -9 1%,可以强行终止上一个正在运行的命令