一、有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%,可以强行终止上一个正在运行的命令