2013-04-02 95 views
0
import os 
def find_method(name): 
     i = 0 
     found_dic = { "$_GET":[], "$_POST":[], "include":[], "require":[], "mysql_query":[], "SELECT":[], "system":[], "exec":[], "passthru":[], "readfile":[], "fopen":[], "eval":[] } 

     for x in file(name, "r"): 
       i += 1 
       for key in found_dic: 
         if x.strip().find(key) != -1: 
           found_dic[key].append("LINE:"+str(i)+":" + x.strip()) 

     print "="*20, name, "="*20 
     for key in found_dic: 
       if found_dic[key]: 
         print " ", "-"*10, key, "-"*10 
         for r in found_dic[key]: 
           print " ",r 

def search(dirname): 
     flist = os.listdir(dirname) 
     for f in flist: 
       next = os.path.join(dirname, f) 
       if os.path.isdir(next): 
         search(next) 
       else: 
         doFileWork(next) 

def doFileWork(filename): 
     ext = os.path.splitext(filename)[-1] 
     #if ext == '.html': print filename 
     if ext == '.php': 
       # print "target:" + filename 
       find_method(filename) 
  1. 我怎麼能只打印結果。它的所有打印文件事件文件的名稱都沒有任何結果。我想要打印的文件名,如果它有它的Python:打印結果只有

  2. 任何結果,這是關於搜索詞,但它顯示了每一個字包括像(seaching爲包括),那麼它也發現在句子和打印所有句話我想詞找到只包含在句子中的單詞「包含」。這真的很難解釋。我希望能夠理解.. srry

+3

恐怕我不明白。例子可能會有很長的路要走。將'x','i','r'和可能的'key'和'found_dic'重命名爲更具可讀性的內容對於減輕像我這樣的凡人的混淆可能會有很大的幫助。 – femtoRgon

+1

你沒有給我們你的完整程序。 'found_dic'永遠不會被定義,也不是'i'。 – MattDMo

+0

此外,請修復您的縮進 - 每個縮進應該有4個空格,沒有混合空格和製表符 – MattDMo

回答

0

我希望這是你的要求爲:

for i, line in enumerate(file(name, "r")): 
    found = False 
    for key in found_dic: 
     if key in line.strip(): 
      found_dic[key].append("LINE:"+str(i)+":" + key) 
      found = True 

    if found: 
     print "="*20, name, "="*20 
     for key in found_dic: 
      if found_dic[key]: 
       print " ", "-"*10, key, "-"*10 
       for r in found_dic[key]: 
        print " ",r 

你必須檢查,如果你找到的東西,如果你只想打印當你真正找到某物時的名字。此外,您只需連接第5行中的密鑰,因爲密鑰就是您搜索的內容。而你只想添加你搜索的內容。

進一步修改: 我在第i行使用了枚舉函數,它比增加你自己的i更容易,更易讀。

我也改變了條件線10.使用在這裏的關鍵字是更簡單,可讀的方式...

+0

thx幫助我,但有一些像這樣的概率就是我的工具的例子====/var/www/html/zboard/zboard.php ==================== ---------- exec ---------- LINE:288: $ a_setup =「」;其他$ a_setup =「

0

它看起來像有可能是第一個打印命令的縮進一個問題,你正在打印'名稱',但它不在for循環中。

嘗試填充你的字典,然後印刷字典,沿着線:

with open(your_file) as f: 
    found_dic = {} 
    key = 'your_key' 

    # populate the dictionary 
    found_dic[key] = [i for i in f if key in i and i not in found_dic] 

以此爲出發點,希望你可以根據你的需要的結果格式到字典中。只有包含'key'的行纔會在found_dic中,所以您應該能夠以任何您喜歡的格式打印出來。

希望這會有幫助