Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit a3de10e

Browse files
committed
new option -t
1 parent 4e6d1b5 commit a3de10e

4 files changed

Lines changed: 39 additions & 6 deletions

File tree

lib/core/common.py

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -425,6 +425,13 @@ def dataToSessionFile(data):
425425
conf.sessionFP.write(data)
426426
conf.sessionFP.flush()
427427

428+
def dataToTrafficFile(data):
429+
if not conf.trafficFile:
430+
return
431+
432+
conf.trafficFP.write(data)
433+
conf.trafficFP.flush()
434+
428435
def dataToDumpFile(dumpFile, data):
429436
dumpFile.write(data)
430437
dumpFile.flush()
@@ -1560,3 +1567,10 @@ def runningAsAdmin():
15601567
isAdmin = True
15611568

15621569
return isAdmin
1570+
1571+
def logHTTPTraffic(requestLogMsg, responseLogMsg):
1572+
kb.locks.reqLock.acquire()
1573+
dataToTrafficFile("%s\n" % requestLogMsg)
1574+
dataToTrafficFile("%s\n" % responseLogMsg)
1575+
dataToTrafficFile("%s\n" % (160*'#'))
1576+
kb.locks.reqLock.release()

lib/core/option.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1031,6 +1031,7 @@ def __setConfAttributes():
10311031
conf.start = True
10321032
conf.threadContinue = True
10331033
conf.threadException = False
1034+
conf.trafficFP = None
10341035
conf.wFileType = None
10351036

10361037
def __setKnowledgeBaseAttributes():
@@ -1080,6 +1081,7 @@ def __setKnowledgeBaseAttributes():
10801081

10811082
kb.locks = advancedDict()
10821083
kb.locks.cacheLock = threading.Lock()
1084+
kb.locks.reqLock = threading.Lock()
10831085
kb.locks.seqLock = None
10841086

10851087
kb.nullConnection = None
@@ -1212,6 +1214,10 @@ def __mergeOptions(inputOptions):
12121214
if not conf.has_key(key) or conf[key] is None or value is not None:
12131215
conf[key] = value
12141216

1217+
def __setTrafficOutputFP():
1218+
if conf.trafficFile:
1219+
conf.trafficFP = codecs.open(conf.trafficFile, "w+", conf.dataEncoding)
1220+
12151221
def __basicOptionValidation():
12161222
if conf.limitStart is not None and not (isinstance(conf.limitStart, int) and conf.limitStart > 0):
12171223
errMsg = "value for --start (limitStart) option must be an integer value greater than zero (>0)"
@@ -1271,6 +1277,7 @@ def init(inputOptions=advancedDict()):
12711277
__setRequestFromFile()
12721278
__setMultipleTargets()
12731279
__setTamperingFunctions()
1280+
__setTrafficOutputFP()
12741281

12751282
parseTargetUrl()
12761283
parseTargetDirect()

lib/parse/cmdline.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -456,6 +456,10 @@ def cmdLineParser():
456456
help="Save and resume all data retrieved "
457457
"on a session file")
458458

459+
miscellaneous.add_option("-t", dest="trafficFile",
460+
help="Save all HTTP traffic data "
461+
"into a textual file")
462+
459463
miscellaneous.add_option("--flush-session", dest="flushSession",
460464
action="store_true", default=False,
461465
help="Flush session file for current target")

lib/request/connect.py

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
from lib.core.common import readInput
2121
from lib.core.common import getFilteredPageContent
2222
from lib.core.common import getUnicode
23+
from lib.core.common import logHTTPTraffic
2324
from lib.core.convert import urlencode
2425
from lib.core.common import urlEncodeCookieValues
2526
from lib.core.data import conf
@@ -61,6 +62,13 @@ def getPage(**kwargs):
6162
delay = 0.00001 * (conf.cpuThrottle ** 2)
6263
time.sleep(delay)
6364

65+
kb.locks.reqLock.acquire()
66+
67+
kb.lastRequestUID += 1
68+
requestID = kb.lastRequestUID
69+
70+
kb.locks.reqLock.release()
71+
6472
url = kwargs.get('url', conf.url).replace(" ", "%20")
6573
get = kwargs.get('get', None)
6674
post = kwargs.get('post', None)
@@ -76,14 +84,12 @@ def getPage(**kwargs):
7684

7785
page = ""
7886
cookieStr = ""
79-
requestMsg = "HTTP request:\n%s " % conf.method
87+
requestMsg = "HTTP request [#%d]:\n%s " % (requestID, conf.method)
8088
requestMsg += "%s" % urlparse.urlsplit(url)[2] or "/"
8189
responseMsg = "HTTP response "
8290
requestHeaders = ""
8391
responseHeaders = ""
8492

85-
kb.lastRequestUID += 1
86-
8793
try:
8894
if silent:
8995
socket.setdefaulttimeout(3)
@@ -277,12 +283,14 @@ def getPage(**kwargs):
277283
page = sanitizeAsciiString(page)
278284
parseResponse(page, responseHeaders)
279285

280-
responseMsg += "(%s - %d):\n" % (status, code)
286+
responseMsg += "[#%d] (%s - %d):\n" % (requestID, status, code)
287+
288+
logHTTPTraffic(requestMsg, "%s%s\n%s" % (responseMsg, headers, page))
281289

282290
if conf.verbose <= 5:
283-
responseMsg += getUnicode(responseHeaders.__str__())
291+
responseMsg += getUnicode(headers.__str__())
284292
elif conf.verbose > 5:
285-
responseMsg += "%s\n%s\n" % (responseHeaders, page)
293+
responseMsg += "%s\n%s\n" % (headers, page)
286294

287295
logger.log(7, responseMsg)
288296

0 commit comments

Comments
 (0)