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