2017-03-18 10 views
1

の周りに最初の時間を実行します。bashコマンドは、私は、次のnmapのコマンドを持って

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 

私はまたしてこれを行うにしようとしましたか?

のbash:予期しないトークンの近くに構文エラー `(」

答えて

1

意識的にではなく

#!/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) 
whileループで Process-Subtitution構文を使用し、 DontReadLinesWithForを参照して、コマンドの出力を解析するため forループを使用しないでください。

エラーが表示される可能性があります。コマンド置換を使用しています$(..)構文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 

、常に二重引用符のシェル変数シェルによって行わWord Splittingを避けるために覚えています。

+0

非常に教育的、ありがとう!明らかに、私は多くのことを学んでいます! – Codingo

関連する問題