随机获取开放指定端口的ip地址并保存

出于练手的目的,写了一个获取开放指定端口号ip的脚本,脚本核心基于强大的nmap工具,然后结果用sed过滤出ip,最终显示到终端,并且保存至文本文件。所以,要运行该脚本,必须先安装nmap软件。 **整个脚本内容如下**: ```language #!/bin/bash get_threads_num(){ ps -ef|grep "nmap -iR"|grep -v "grep"|wc -l } get_ip(){ nmap -iR $num -p $ports --open -Pn --max-hostgroup $hosts --max-parallelism $conns $args|sed -nr -e 's/.*[^0-9]+(([0-9]{1,3}\.){3}[0-9]{1,3}).*/\1/p' -e 's/([0-9]{1,5})\/.*/\1/p' } save(){ while read line do if ! [[ "$line" =~ ^[0-9]{1,5}$ ]];then echo echo "##${sum}th scanning." ip=$line echo -n $ip" " continue else port=$line echo -n $port" " echo $ip >> $port.txt fi done } run(){ while true do while (( `get_threads_num` < threads )) do ((sum++)) { get_ip|save }& done sleep 1 done } usage(){ cat <<-EOF usage:$0 <--ports PORTS> [options]... options: --num the scan-ip numbers in every process. --threads the total processes of nmap scan. --hosts the max hosts numbers in every nmap scan. --conns the max total connections in per nmap scan. --ports the ports which will be scanned. --help print this help messages. --stop kill all processes. EOF } num=100 sum=0 threads=10 args="" hosts=100 conns=100 while true do case "$1" in --num) num=$2 shift 2 ;; --ports) ports=$2 shift 2 ;; --threads) threads=$2 shift 2 ;; --hosts) hosts=$2 shift 2 ;; --conns) conns=$2 shift 2 ;; --stop) pkill `basename $0` shift ;; --help) usage exit ;; --*) args=$args" "$1" "$2 shift 2 ;; *) break ;; esac done if ! [[ $ports ]];then echo "You must specify --ports options." usage exit fi clear trap "pkill `basename $0`" 2 run ``` **脚本功能:** 使用nmap扫描互联网指定端口号,以端口号为文件名保存开放该端口号的ip,每个ip一行,同时将结果输出到终端。 直接运行该脚本,可见如下结果: ![图片.png](http://www.icode9.com/i/li/?n=2&i=images/20210628/1624856984407032.png?,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=) **参数说明:** --ports:指明需要扫描的端口号(必须指定的参数,与nmap格式相同) --num:在同一nmap进程内同时扫描的ip个数(默认值100) --threads:同时运行的nmap进程个数(默认值10) --hosts:每个nmap进程同时扫描的主机数量(默认值100) --conns:每个nmap进程最大连接数(默认值100) --stop:结束所有nmap扫描进程 --help:打印帮助信息 **应用举例:** ./scan-ips.sh --ports 21-23 终端输出: ![图片.png](http://www.icode9.com/i/li/?n=2&i=images/20210628/1624857844441862.png?,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=) 同时在当前目录下生成21.txt,22.txt,23.txt三个文本文件,记录开放对应端口ip
上一篇:Vue深入响应式原理


下一篇:xml实体引用