2016-03-22 11 views
0

私のコードで正確な問題を特定するのに問題があります。私はポートが範囲内にあるかどうかを確認するinrange()と、txtファイルをとり、キーワード "UDP"または "TCP"を探し、ポートを見て(:マークの直後)、filt()、その数値が範囲内にあるかどうかを確認します。ループで負の結果を返す

def inrange(file,character, num): 
    with open(file, 'r') as r: 
     for lines in r: 
      for key, value in sshd.items(): 
       if character == key and character in lines: 
        if num in sshd.get(character): 
         return True 
        else: 
         return False 

       elif character == key and character in lines: 
        if num in sshd.get(character): 
         return True 
        else: 
         return False 

これは特にsshd向けです。あなたは上記の辞書sshdを見れば、私は私のテキストとしてファイル -

アクティブ接続

Proto Local Address   Foreign Address  State   PID 
    UDP 0.0.0.0:123    0.0.0.0:0    LISTENING  5987 sshd 

あなたが見ることができるようにこれを持っている場合

def filt(file): 
    with open(file, 'r') as r: 
     for i, line in enumerate(r): 
      if "sshd" in line: 
       plusOne = i + 1 
       newline = line.strip() 
       splitIt = newline[7:22] 
       my_string = splitIt.split(":", 1)[1] 
       if inrange(file, "TCP", int(my_string)): 
        print("Line " + str(plusOne) + " is in range" + " " + my_string)  
       elif inrange(file, "UDP", int(my_string)): 
        print("Line " + str(plusOne) + " is in range" + " " + my_string)  
       else: 
        print("Not in range") 

は今、この作品、UDP 123の範囲内にあります。私は、真実の声明を受け取ります。 UDPをTCPに変更すると、それは私に悪い声明を返します。それは動作します。問題は、これに複数の行を追加すると発生します。

Active Connections 

    Proto Local Address   Foreign Address  State   PID 
    UDP 0.0.0.0:123    0.0.0.0:0    LISTENING  5987 sshd 
    TCP 0.0.0.0:123    0.0.0.0:0    LISTENING  5987 sshd 
    UDP 0.0.0.0:123    0.0.0.0:0    LISTENING  5987 sshd 
    TCP 0.0.0.0:123    0.0.0.0:0    LISTENING  5987 sshd 

Iバックすべて陽性の結果を取得:

Line 5 is in range 123  
Line 6 is in range 123  
Line 7 is in range 123  
Line 8 is in range 123 

ライン6とライン8のような場合であってはならない範囲内にないポート123のTCPです。私はここで何かを紛失しているように感じる。それはわかりません。

+0

クイックデバッグの質問 - どのコード行が印刷を行っていますか?おそらく、 'print'が' Line ...範囲内のUDPラインです... 'のようなものを呼び出すようにします。エラーを特定するのに役立つかもしれません – dwanderson

+1

'inrange'関数の' if'と 'elif'セクションは同じですか? –

+0

@ PM2Ringそれを捨てるのを忘れました。私はinrange関数に文字入力を追加しました。 –

答えて

3

文字列sshdを正しく検索しますが、文字列TCPUDPをファイル全体で検索します。 UDPと123の1行があるので、inrange(file, "UDP", int(my_string)):へのすべての呼び出しは、現在の行にTCPがあってもtrueを返します。

現在の行からprotoを抽出する必要があります。何かのように

proto = newline[:3] 
    if (proto in ['UDP', 'TCP']) and inrange(file, proto, int(my_string)): 
     print("Line " + str(plusOne) + " is in range" + " " + my_string)  
    else: 
     print("Not in range") 
1

あなたfilt機能をチェックし、それが範囲の両方セットに対して見つかったすべてのポートは - 私は、読み取り中の行からのプロトコルを解析し、ポート番号とともにinrangeにその変数を渡すために、その関数を書き換えることをお勧めしたいです。

少しの追加の注意 - inrange関数では、ifelifブランチの両方で同じ条件をテストしています。

関連する問題