1. 怎麼用Linux 正則表達式過濾出IP地址
1、你可以通過AWK工具的正則表達式規則過濾 2、你可以能SED工具的正則表達式規則替換 3、你也可以用perl語言來過濾你的日誌文件 方法很多,看你的選擇
2. 如何用shell取出如下字元中的ip地址
[seesea@UC ~]$ cat b.txt
Failed password for adm from 58.248.38.108 port 21918 ssh2
Failed password for dds from 58.248.32.108 port 21918 ssh2
Failed password for invalid user student from 58.248.38.108 port 21918 ssh2
Failed password for invalid user stnt from 58.248.38.18 port 21918 ssh2
[seesea@UC ~]$ grep -oP '\d+\.\d\+\.\d+\.\d+' b.txt
[seesea@UC ~]$ grep -oP '\d+\.\d+\.\d+\.\d+' b.txt
58.248.38.108
58.248.32.108
58.248.38.108
58.248.38.18
3. linux 分析apache日誌,找的IP 屏蔽IP
|#!內/bin/bash
DATE=
while true
do
cat /var/log/virtualmin/all.log|容grep $DATE'|grep '/customer/account/createpost/'|cut -d ' ' -f 1 |sort |uniq -c | sort -nr |head -n 10|awk '{print $2}'
sleep 60
done
4. linuxshell代碼,將文本文件a中的內容ip=不固定的ip地址替換成ip=本機ip,其
ifconfig eth0 | grep "inet addr" | awk '{print $2}' | awk -F: '{print $2}'
上面是獲取eth0的IP地址
5. 用Linux Shell 腳本過濾IP地址192.168.0.100/29中的100和29,應該怎麼寫語句
過濾出來是幾個意思。
得到
192.168.0.100/29 還是
192.168.0.
還是
所有以100/29結尾的ip
6. shell命令。日誌中有若干個不同的IP地址,如何將這N個不同的IP地址,修改為127.0.0.1. seed命令如何寫
##測試文抄件,裡面有襲4條IP和其他數據
catb.sh
123.213.123.12312312312312312312312dsasdw
213.23.213.123rwerwer24osdjfdgds
42.324.123.123fsdfasdasda
123.231.54.23dfsfsdfdsf
##執行指令
sed-i's/[0-9]*.[0-9]*.[0-9]*.[0-9]*/127.0.0.1/g'b.sh
#結果驗證
catb.sh
127.0.0.112312312312312312312dsasdw
127.0.0.1rwerwer24osdjfdgds
127.0.0.1fsdfasdasda
127.0.0.1dfsfsdfdsf
7. shell腳本,實現腳本ip地址變換,每次輸出不同的ip地址。
先看效果:
[root@mailtmp]#./runplayload.shiplist.txt-s192.168.33.34-40
Nosuchip【192.168.33.35】in【iplist.txt】
1--192.168.33.34
2--192.168.33.36
3--192.168.33.37
4--192.168.33.38
5--192.168.33.39
6--192.168.33.40
[root@mailtmp]#./runplayload.shiplist.txt-s192.168.33.34-192.168.33.40
Nosuchip【192.168.33.35】in【iplist.txt】
1--192.168.33.34
2--192.168.33.36
3--192.168.33.37
4--192.168.33.38
5--192.168.33.39
6--192.168.33.40
[root@mailtmp]#
看一下.txt文本格式
[root@mailtmp]#catiplist.txt
192.168.33.34
192.168.33.36-192.168.33.40
192.168.33.200
192.168.33.204-210
192.168.33.231
腳本正文:
#!/bin/bash
#------------------------------------------
#Copyritht(C),[email protected]
#腳本名:
#腳本位置:
#腳本用途:
#腳本修改歷史:
#<作者><日期><版本><描述>
#老耿2015/07/131.0創建
#版權:GPL
#-------------------------------------------
./root/.bash_profile
#定義ip個數
r=6
#傳參判斷
echo$3|grep-q"[0-9]-[0-9]";stat=$?#這里在邏輯上應該先判斷存不存在$3
if[$#-ne3-o"$2"!="-s"-o${stat}-ne0];then
if[$stat-ne0];then
echo"腳本使用說明:
COMMAND文件名-sip范圍
例:sh./run_playload.shiplist.txt-s192.168.33.20-50
或sh./run_playload.shiplist.txt-s192.168.33.20-192.168.33.50"
exit
fi
fi
if[!-f$1];then
echo"文件【$1】不存在!"
exit
fi
#iplist.txt文件格式轉換
iplist=`cat$1|awk-F'[-.]''{if($0~/-/){sub(/-.*$/,"",$4);for(i=$4;i<=$NF;i++){print$1"."$2"."$3"."i}}elseprint$0}'`
#xx.xx.xxipv4前三個位元組
ip1="`echo$3|sed-r's/.[0-9]+-.*$//'`"
#起始ip最後一個位元組
ip2="`echo$3|awk-F'.''{sub(/-.*$/,"",$4);print$4}'`"
#結束ip最後一個位元組
ip3="`echo$3|awk-F'[-.]''{print$NF}'`"
#如果起始ip大於結束ip,則兩個互換
if(($ip2>$ip3));then
ip_tmp=$ip2
ip2=$ip3
ip3=$ip_tmp
fi
#合並完整的ip,存在ip()里
ip=()
foriin`seq${ip2}${ip3}`
do
ipp="${ip1}.${i}"
echo"${iplist}"|grep-wq"${ipp}"
if[$?-ne0];then
echo"Nosuchip【${ipp}】in【$1】"
else
ip=(${ip[*]}${ipp})
fi
done
#判斷ip()不為空的情況
if[-n"${ip[*]}"];then
#定義ip個數
#r=6
#判斷ip取值個數,分兩種情況處理
if((${r}<=${#ip[@]}));then
foriin`seq${r}`
do
letj=$i-1
echo"${i}--${ip[j]}"
done
else
for((i=0;i<${#ip[@]};i++))
do
letj=$i+1
echo"${j}--${ip[i]}"
done
echo"WARNING:受范圍限制,未能取到完整的${r}個ip!"
fi
fi
8. 求救用SHELL 實現,access.log日誌中將IP為10.1.0.10的信息取出存在到save.log文件中,並加入定時任務.
1:「IP為10.1.0.10的信息」 採用查找關鍵字"10.1.0.10」的方式,即:grep "10.1.0.10" $HOME/access.log >> $HOME/save.log ;文件路徑換成你自己的
2:將這句話加內入定時任務:編輯容crontab,執行命令:crontab -e,編輯時操作參考vi編輯器,追加一行:* * * * * grep "10.1.0.10" $HOME/access.log >> $HOME/save.log,其中前幾位周期控制含義參考crontab的使用。這句話表示每隔1分鍾都運行一次.
9. linux shell中字元串匹配截取IP
你這個可用多個方法,最簡單的可用grep
如
s="Connections: authenticated: 10.0.115.172::56498, as admin (Full access)"
echo $s | grep -E -o "[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+::[0-9]+"
結果
10.0.115.172::56498
這個正則相關的學習,對於學習Linux來說也是非常重專要屬的,劉老師的新書《linux就該這么學》,關於這塊講解得非常透徹,你可以翻閱查看一下。
10. 在shell中如何判斷字元串是否為有效的IP地址
|CheckIPAddr()
{
echo $1| "^[0-9]\{1,3\}\.\([0-9]\{1,3\}\.\)\{2\}[0-9]\{1,3\}$" > /dev/null;
#IP地址必須為全數字
if [ $? -ne 0 ]
then
return 1
fi
ipaddr=$1
a=`echo $ipaddr|awk -F . '{print $1}'` #以"."分隔,取出每個列的值
b=`echo $ipaddr|awk -F . '{print $2}'`
c=`echo $ipaddr|awk -F . '{print $3}'`
d=`echo $ipaddr|awk -F . '{print $4}'`
for num in $a $b $c $d
do
if [ $num -gt 255 ] || [ $num -lt 0 ] #每個數值必須在0-255之間
then
return 1
fi
done
return 0
}
if [ $# -ne 1 ];then #判斷傳參數量
echo "Usage: $0 ipaddress."
exit
else
CheckIPAddr $1
fi