2017-03-18 128 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