#!/usr/bin/python
#coding=utf-8
from scapy.all import *
import time
import optparse
# 為避免ipy庫中的ip類與scapy庫中的ip類衝突,重新命名為iptest類
from ipy import ip as iptest
ttlvalues = {}
thresh = 5
# 檢查資料報的ip層,提取出源ip和ttl欄位的值
def testttl(pkt):
try:
if pkt.haslayer(ip):
ipsrc = pkt.getlayer(ip).src
ttl = str(pkt.ttl)
#print "[+] pkt received from: " + ipsrc + " with ttl: " + ttl
checkttl(ipsrc, ttl)
except:
pass
def checkttl(ipsrc, ttl):
# 判斷是否是內網私有位址
if iptest(ipsrc).iptype() == 'private':
return
# 判斷是否出現過該源位址,若沒有則構建乙個發往源位址的icmp包,並記錄回應資料報中的ttl值
if not ttlvalues.has_key(ipsrc):
#icmp發現掃瞄
#pkt = sr1(ip(dst=ipsrc) / icmp(), retry=0, timeout=1, verbose=0)
pkt = sr1(ip(dst=ipsrc) / icmp() / "zhou")
print pkt
ttlvalues[ipsrc] = pkt.ttl
# 若兩個ttl值之差大於閾值,則認為是偽造的源位址
if abs(int(ttl) - int(ttlvalues[ipsrc])) > thresh:
print '\n[!] detected possible spoofed packet from: ' + ipsrc
print '[!] ttl: ' + ttl + ', actual ttl: ' + str(ttlvalues[ipsrc])
def main():
parser = optparse.optionparser("[*]usage python spoofcheckttl.py -i -t ")
parser.add_option('-i', dest='iface', type='string', help='specify network inte***ce')
parser.add_option('-t', dest='thresh', type='int', help='specify threshold count ')
(options, args) = parser.parse_args()
if options.iface == none:
conf.iface = 'eth0'
else:
conf.iface = options.iface
if options.thresh != none:
thresh = options.thresh
else:
thresh = 5
sniff(prn=testttl, store=0)
if __name__ == '__main__':
main()
重點說明一下,避免大家走一些彎路,這段**中最重要部分就是:
# 判斷是否出現過該源位址,若沒有則構建乙個發往源位址的icmp包,並記錄回應資料報中的ttl值
if not ttlvalues.has_key(ipsrc):
#icmp發現掃瞄
#pkt = sr1(ip(dst=ipsrc) / icmp(), retry=0, timeout=1, verbose=0)
pkt = sr1(ip(dst=ipsrc) / icmp() / "zhou")
ttlvalues[ipsrc] = pkt.ttl
其中原文中的
#pkt = sr1(ip(dst=ipsrc) / icmp(), retry=0, timeout=1, verbose=0)
我已注釋掉了,因為在除錯過過程,pkt結果一直是none,所我翻查了關於
scapy學習icmp報文資料,將**改為
pkt = sr1(ip(dst=ipsrc) / icmp() / "zhou") 後,結果正常輸出。有興趣有朋友可以深入研究。
查詢mx的ttl值
dig nocmd com mx noall answer 舉個例子,像上面寫的那樣,gmail.com域的mx記錄的ttl值是300s,gmail.com域的管理員要求遠端伺服器快取它的mx記錄不能高於5分鐘,所以當你第一次查詢那個記錄 gmail.com的mx記錄 時,dig會告訴你乙個300的...
解析mysql不重複字段值求和
在使用mysql時,有時需要查詢出某個欄位不重複的記錄,雖然mysql提供有distinct這個關鍵字來過濾掉多餘的重覆記錄只保留一條,但往往只用它來返回不重覆記錄的條數,而不是用它來返回不重記錄www.cppcns.com的所有值。其原因是distinct只能返回它的目標字段,而無法返回其它字段,...
關於PING命令TTL值的理解
關於ttl值 ttl值是生存時間 time to live 的縮寫,ip包被路由器丟棄之前允許通過的最大網段數量。雖然意思是生存時間,但看這個解釋是不是有點讓人摸不清頭腦?好那麼我們可以看看ip資料報,這個ttl值到底是指什麼?結果我幹了一件事就是ping了www.baidu.com的網域名稱,我們...