簡體   English   中英

索引錯誤:在python中列出超出范圍的索引

[英]Index Error: list index out of range in python

我有互聯網安全課的項目。 我的搭檔開始了這個項目並編寫了一些 python 代碼,我必須從他停下的地方繼續。 但我不知道 python,我打算通過運行他的代碼並檢查它是如何工作的來學習。 但是,當我執行他的代碼時,我收到一個錯誤,即“IndexError:列表索引超出范圍”。

import os
# Deauthenticate devices
os.system("python2 ~/Downloads/de_auth.py -s 00:22:b0:07:58:d4 -d & sleep 30; kill $!")
# renew DHCP on linux "sudo dhclient -v -r & sudo dhclient -v"


# Capture DHCP Packet
os.system("tcpdump -lenx -s 1500 port bootps or port bootpc -v > dhcp.txt & sleep 20; kill $!")

# read packet txt file
DHCP_Packet = open("dhcp.txt", "r")

# Get info from txt file of saved packet
line1 = DHCP_Packet.readline()
line1 = line1.split()
sourceMAC = line1[1]
destMAC = line1[3]
TTL = line1[12]
length = line1[8]

#Parse packet
line = DHCP_Packet.readline()
while "0x0100" not in line:
    line = DHCP_Packet.readline()

packet = line + DHCP_Packet.read()

packet = packet.replace("0x0100:", "")
packet = packet.replace("0x0110:", "")
packet = packet.replace("0x0120:", "")
packet = packet.replace("0x0130:", "")
packet = packet.replace("0x0140:", "")
packet = packet.replace("0x0150:", "")
packet = packet.replace("\n", "")
packet = packet.replace(" ", "")
packet = packet.replace("   ", "")
packet = packet.replace("000000000000000063825363", "")

# Locate option (55) = 0x0037
option = "0"
i=0
length = 0 
while option != "37":
    option = packet[i:i+2]
    hex_length = packet[i+2:i+4]
    length = int(packet[i+2:i+4], 16)
    i = i+ length*2 + 4

i = i - int(hex_length, 16)*2
print "Option (55): " + packet[i:i+length*2 ] + "\nLength: " + str(length) + " Bytes"
print "Source MAC: " + sourceMAC

非常感謝

索引錯誤可能意味着您的列表中有一個空的或未定義的部分(索引)。 最有可能在底部的循環條件中:

while option != "37":
    option = packet[i:i+2]
    hex_length = packet[i+2:i+4]
    length = int(packet[i+2:i+4], 16)
    i = i+ length*2 + 4

或者,它可以更早地讀取您的文本文件:

# Get info from txt file of saved packet
line1 = DHCP_Packet.readline()
line1 = line1.split()
sourceMAC = line1[1]
destMAC = line1[3]
TTL = line1[12]
length = line1[8]

嘗試實際打開文本文件並確保正確引用所有行。

如果您是編碼新手並且不習慣理解錯誤消息或使用調試器,找到問題區域的一種方法是在代碼print ('okay')之間包含print ('okay') ,逐步向下移動直到該行不再印刷。

我對 python 也很陌生,但我發現通過編寫自己的代碼和谷歌搜索你想要實現的目標更容易學習(尤其是當合作伙伴讓你這樣編碼時......)。 本網站提供有關內置命令的文檔(在頂部選擇您的版本): https : //docs.python.org/3.4/contents.html ,本網站包含更深入的常用功能教程: http:// /www.tutorialspoint.com/python/index.htm

我認為被拆分的變量line1沒有多達 13 個數字,因此在執行語句TTL = line1[12]時會出錯。

也許你和你的合作伙伴沒有相同的環境,所以你通過執行 os.system("") 得到的結果(文件dhcp.txt )可能為空(或格式錯誤)。 您應該檢查文件dhcp.txt的內容或在line1 = DHCP_Packet.readline()后添加語句print line1以檢查其格式是否正確。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM