2017-03-18 120 views
1

我有以下NMAP命令:bash命令只执行第一次就

nmap -n -p 25 10.11.1.1-254 --open | grep '[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\.[0-9]\{1,3\}' | cut -d" " -f5 

这样就产生了,我试图通过下面的python脚本IP地址的列表:

#!/usr/bin/python 


# Python tool to check a range of hosts for SMTP servers that respond to VRFY requests 

import socket 
import sys 
from socket import error as socket_error 

# Read the username file 
with open(sys.argv[1]) as f: 
    usernames = f.read().splitlines() 

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
host_ip = sys.argv[2] 

print("****************************") 
print("Results for: " + host_ip) 
try: 
    c = s.connect((host_ip,25)) 
    banner=s.recv(1024) 

    #Send VRFY requests and print result 
    for user in usernames: 
     s.send('VRFY ' + user + '\r\n') 
     result = s.recv(1024) 
     print(result) 

    print("****************************") 
    #Close Socket 
    s.close() 

#If error is thrown 
except socket_error as serr: 
    print("\nNo SMTP verify for " +host_ip) 
    print("****************************") 

我试着用下面的命令来做到这一点,但它只是运行脚本在它发现的第一个IP:

./smtp_verify.py users.txt $(nmap -n -p 25 10.11.1.1-254 --open | grep '[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\.[0-9]\{1,3\}' | cut -d" " -f5) 

我也试过这样做:

for $ip in (nmap -n -p 25 10.11.1.1-254 --open | grep '[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\.[0-9]\{1,3\}' | cut -d" " -f5); do ./smtp_verify.py users.txt $ip done 

但是我收到的语法错误,它提示我,我无法通过管道这样?

庆典:附近意外的标记语法错误'(”

回答

1

不自觉地使用for循环解析命令输出,看DontReadLinesWithFor,而使用Process-Subtitution语法与while

#!/bin/bash 

while IFS= read -r line; do 
    ./smtp_verify.py users.txt "$line" 
done< <(nmap -n -p 25 10.11.1.1-254 --open | grep '[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\.[0-9]\{1,3\}' | cut -d" " -f5) 

对于您可能看到的错误,您是而不是使用命令替换$(..)语法pr为了运行管道命令,命令应该在()前面加上$。喜欢的东西,

#!/bin/bash 

for ip in $(nmap -n -p 25 10.11.1.1-254 --open | grep '[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\.[0-9]\{1,3\}' | cut -d" " -f5); do 
    ./smtp_verify.py users.txt "$ip" 
done 

而且记得要经常双引号shell变量避免Word Splitting外壳环境进行的。

+0

很有教育意义,谢谢!显然,我还有很多要学习! – Codingo