Linux shell相关基础,创建shell脚本扫描判断局域网主机操作系统类型

nmap:linux使用nmap 对局域网扫描,查看arp缓存表就可以知道局域内主机ip和mac了,方法如下:

nmap参数-sP -PU -sS ,-sS半开放扫描,不用执行完TCP三次握手,执行得很快。nmap -A扫描详细信息,速度慢。

扫描之后查看arp缓存表获取局域网主机IP地址 cat /proc/net/arp

一般操作系统ping返回默认TTL:windows 128 win7 64 linux64 unix255

linux shell 相关:

    大于号:将一条命令执行结果(标准输出,或者错误输出,本来都要打印到屏幕上面的)重定向其它输出设备(文件,打开文件操作符,或打印机等等)

    >> 是追加内容( 加在原文本下一行,非原文本末尾)

    > 是覆盖原有内容(清空并重写)

    小于号:命令默认从键盘获得的输入,改成从文件,或者其它打开文件以及设备输入

    $:$ip代表 ip字符串 

    ping -c 2 发送两个包后停止

    反引号,单引号,双引号:

       反引号位 (`) 位于键盘的Tab键的上方、1键的左方。注意与单引号(')位于Enter键的左方的区别。
  在Linux中起着命令替换的作用。命令替换是指shell能够将一个命令的标准输出插在一个命令行中任何位置。
  如下,shell会执行反引号中的date命令,把结果插入到echo命令显示的内容中。
  [root@localhost sh]# echo The date is `date`
  The date is 2011年 03月 14日 星期一 21:15:43 CST
  
  单引号、双引号用于用户把带有空格的字符串赋值给变量事的分界符。
  [root@localhost sh]# str="Today is Monday"
  [root@localhost sh]# echo $str
  Today is Monday
  如果没有单引号或双引号,shell会把空格后的字符串解释为命令。
  [root@localhost sh]# str=Today is Monday
  bash: is: command not found
  单引号和双引号的区别。单引号告诉shell忽略所有特殊字符,而双引号忽略大多数,但不包括$、\、`。
  [root@localhost sh]# testvalue=100
  [root@localhost sh]# echo 'The testvalue is $testvalue'
  The testvalue is $testvalue
  [root@localhost sh]# echo "The testvalue is $testvalue"

  The testvalue is 100

        &和&&,|和||:

        &  表示任务在后台执行,如要在后台运行redis-server,则有  redis-server &
        && 表示前一条命令执行成功时,才执行后一条命令 ,如 echo '1‘ && echo '2'    
        | 表示管道,上一条命令的输出,作为下一条命令参数,如 echo 'yes' | wc -l
        || 表示上一条命令执行失败后,才执行下一条命令,如 cat nofile || echo "fail"

        grep 文本搜索,见 http://man.linuxde.net/grep

        awk是一种编程语言它在命令行中使用,但更多是作为脚本来使用。 见 http://man.linuxde.net/awk

        awk -F'[: =]' '{print $9}'     //  -F 'xxx' 表示以xxx为字段分割符,F'[: =]'表示以:、空格、=为分隔符分割,也可以通过正则表达式+号如-F'[:]'+' '实现多分隔符,{print $9}表示打印分割出来的第9个字段

        sort将文件进行排序,并将排序结果标准输出。见 http://man.linuxde.net/sort

        uniq用于报告或忽略文件中的重复行,一般与sort命令结合使用。 见 http://man.linuxde.net/uniq

        uniq删除的所谓的重复项是指连续出现的相同记录项,sort |uniq等同于sort -u,先排序后删除,会将全部文本重复项删除

        使用-z "$ttl" 判断字符串是否为空 (或! -n "$ttl")

        cat $LOG >> $PINGLOG 将LOG文件中的内容追加到PINGLOG最后

        label=$(($label+1))实现整形变量自加1

        tee同时输出到文件

        > $LOG 清空文件 ,./当前目录

        ping -c 2 -i 0.1 -W 100 :发2个包,时间间隔0.1秒,超时时间100ms

#!/bin/sh
ip="192.168.1."
LOG=./templog
LIST=./iplist
PINGLOG=./pinglog
label=1
> $LOG
> $LIST
> $PINGLOG
for i in `seq 1 254`
do
   ping -c 1 -i 0.2 $ip$i > $LOG
   cat $LOG >> $PINGLOG
   okip=`cat $LOG | grep "ttl=" | awk -F '[: =]' '{print $4}'|sort |uniq`
   ttl=`cat $LOG | grep "ttl=" | awk -F '[: =]' '{print $9}'|sort |uniq`
   if  [ ! -n "$ttl" ];
	then	echo "no reply"
   elif	[ "$ttl" -eq 64 ];
	then    echo  "Host $label $okip is linux" | tee -a $LIST
	label=$(($label+1))
   elif [ "$ttl" -eq 128 ];
	then	echo  "Host $label $okip is windows" | tee -a $LIST
	label=$(($label+1))
   else
        echo  "Host $label $okip is other deviece, ttl=$ttl" | tee -a $LIST
	label=$(($label+1))
   fi
done

你可能感兴趣的:(Linux shell相关基础,创建shell脚本扫描判断局域网主机操作系统类型)