2017-05-25 47 views
-1

日志文件包含此行。如何从日志文件中提取IP地址并将其附加到URL?

Nov 28 21:39:25 soft-server sshd[11946]: Accepted password for myusername from 10.0.2.2 port 13494 ssh2 

我想运行curl命令只有在日志文件中包含“为接受口令”字符串和IP地址追加到URL。

像这样:

if [ grep -q "Accepted password for" var/log/auth.log] 
then 
    curl 'www.examplestextmessage.com/send-a-message/text=$IP_address' 
fi 

此外,如何改写上述脚本可以检查多个登录和为每个结果运行单独curl命令?

为例如:

11月28日21时35分25秒的sshd本地主机[565]:服务器侦听0.0.0.0端口22

11月28日21时39分25秒的软服务器的sshd [11946] :服务器侦听0.0.0.0端口22

11月28日21时41分25秒本地主机:从10.0.2.2端口13494 SSH2

11月28日21时四十分25秒的sshd本地主机[565]接受为名为myUsername 密码sshd [565]:在0.0.0.0端口上监听的服务器22

11月28日21时42分25秒的sshd本地主机[565]:服务器侦听0.0.0.0端口22

11月28日21时43分25秒的软服务器的sshd [11946]:从10.0接受名为myUsername密码.1.1端口13494 SSH2

+0

*可以检查多个登录的脚本* - 显示相应的输入 – RomanPerekhrest

+0

在问题中有格式化输入是好的,而不是在评论中 – RomanPerekhrest

+0

对不起,我这个网站是新的。 – Ash

回答

0
grep -oP 'Accepted password for \w+ from\s\K[^ ]+' log.file|while read line; 
    do 
    curl "www.examplestextmessage.com/send-a-message/text=$line" 
done 

说明:
首先grep将列出含有“接受密码”的话就行了IP地址。然后将grep结果的流送入while loop以将IP地址附加到curl并执行卷曲。

+0

虽然此代码片段可能会解决问题,但[包括解释](// meta.stackexchange.com/questions/114762/explaining-entirely-code-based-answers)确实有助于提高帖子的质量。请记住,您将来会为读者回答问题,而这些人可能不知道您的代码建议的原因。也请尽量不要用解释性注释来挤占代码,这会降低代码和解释的可读性! – kayess

+0

非常感谢。 – Ash

0

1行脚本xargs的:

grep -oP 'Accepted password for \w+ from\s\K[^ ]+' "/var/log/auth.log" | xargs -I{} -r curl -v -L "www.examplestextmessage.com/send-a-message/text={}" 

xarg -r如果标准输入完全是空的,不执行命令。默认情况下,即使没有输入,该命令也会运行一次。

xarg -I{}选项改变了新命令行的构建方式。 xargs不会一次添加尽可能多的参数,而会从其输入中一次输入一个名称,查找给定的标记({}在此处)并将其替换为名称。

0

说明:

  1. 用grep “为接受口令”
  2. 内容从结果集找到IP地址用awk /切
  3. 使用的IP地址列表作为输入的for循环

以下是代码示例

for IP_address in `cat auth.log | grep 'Accepted password for' | awk '{print $11}'` 
do 
curl "www.examplestextmessage.com/send-a-message/text=$IP_address" 
done 
+0

'''cat auth.log | grep'接受的密码为| | awk'{print $ 11}''''是不推荐的风格。现在更好的使用'$(cat auth.log | grep'|'awk'{print $ 11}'')接受的密码' – beliy

0

的完整性的另一个选项是sed使用-E以满足正则表达式:

sed -En 's/(^.*Accepted password for)(.*)(from)(.*)(port.*$)/\4/p' 

这将分裂成文本通过提取括号之间标志着五个独立的部分。然后,我们专注于第4次提取获取IP地址

相关问题