2015-07-03 2 views
3

Я был в состоянии захватить трафик HTTP (s) из смартфона, а также хранить этот трафик, используя mitmdump с помощью командыКак захватить заголовки HTTP-запроса/ответа с помощью mitmproxy?

mitmdump -w outfile 

Это кажется сваливать HTTP body вместе с headers а. Я заинтересован в том, чтобы захватить только заголовки, предварятельно как одну строку csv (или json string). Как я могу это сделать?

+0

сделал вам тр y фильтр уже? https://mitmproxy.org/doc/features/filters.html – Marged

ответ

3

Вы можете извлечь любые поля заголовка, которые вам нужны, например, с помощью mitmdump и объекта потока (встроенные скрипты python). Встроенные сценарии описаны здесь: https://mitmproxy.org/doc/scripting/inlinescripts.html

Чтобы извлечь все заголовки, я использовал следующую команду:

$ mitmdump -n -q -s parse_headers.py -r <file>.mitm 

parse_headers.py встроенный скрипт следующим образом:

def response(context, flow): 
    request_headers = [{"name": k, "value": v} for k, v in flow.request.headers] 
    response_headers = [{"name": k, "value": v} for k, v in flow.response.headers] 
    print request_headers 
    print response_headers 
+0

У меня нет вывода, кроме «Ошибка скрипта: слишком много значений для распаковки ошибки скрипта: слишком много значений для распаковки» ... :( –

1

U использует @ rvaneijk, но я получал следующую ошибку:

Script error: too many values to unpack 
Script error: too many values to unpack 

Я нашел золь социологическое загрязнение в 'too many values to unpack', iterating over a dict. key=>string, value=>list и изменил код следующим образом:

[[email protected] npmo-server]# cat parse_headers.py 
def response(context, flow): 
    request_headers = [{"name": k, "value": v} for k, v in flow.request.headers.iteritems()] 
    response_headers = [{"name": k, "value": v} for k, v in flow.response.headers.iteritems()] 
    print "################################" 
    print "FOR: " + flow.request.url 
    print flow.request.method + " " + flow.request.path + " " + flow.request.http_version 
    print "HTTP REQUEST HEADERS" 
    print request_headers 
    print "HTTP RESPONSE HEADERS" 
    print response_headers 
    print "" 

Выход этого заключается в следующем:

10.137.66.4:63870: clientdisconnect 

################################ 
FOR: http://pe2enpmas300.corp.company.net:8081/csv-stringify 
GET /csv-stringify HTTP/1.1 
HTTP REQUEST HEADERS 
[{'name': 'accept-encoding', 'value': 'gzip'}, {'name': 'authorization', 'value': 'Bearer d2e0770656a9726dfb559ea2ddccff3078dba9a0'}, {'name': 'version', 'value': '2.11.2'}, {'name': 'accept', 'value': 'application/json'}, {'name': 'referer', 'value': 'install restify'}, {'name': 'npm-session', 'value': 'a9a4d805c6392599'}, {'name': 'user-agent', 'value': 'npm/2.11.2 node/v0.10.25 linux x64'}, {'name': 'if-none-match', 'value': 'W/"43fb-8/w7tzRZ9CvawCJo5Uiisg"'}, {'name': 'host', 'value': 'registry-e2e.npmjs.intuit.net'}, {'name': 'Connection', 'value': 'keep-alive'}, {'name': 'X-Forwarded-For', 'value': '10.181.70.43'}] 
HTTP RESPONSE HEADERS 
[{'name': 'X-Powered-By', 'value': 'Express'}, {'name': 'ETag', 'value': 'W/"43fb-8/w7tzRZ9CvawCJo5Uiisg"'}, {'name': 'Date', 'value': 'Tue, 18 Oct 2016 08:04:45 GMT'}, {'name': 'Connection', 'value': 'keep-alive'}] 

Вы можете использовать Docker следующим образом:

  1. Создайте файл локально
  2. Заполните следующие

Убедитесь, что у вас есть разрешение на чтение файла.

docker run -ti -p 8080:8080 -v $PWD/parse_headers.py:/tmp/parse_headers.py 
    mitmproxy/mitmproxy mitmdump -s /tmp/parse_headers.py 
    -R http://npmjs.corp.company.net:8081 8080 
+0

Важное обновление MITM должен быть представлен в декабре 2016 года. – rvaneijk

1

Еще один полученный фрагмент кода на основе предыдущих ответов и обновлен до Python3:

def response(flow): 
    print("") 
    print("="*50) 
    #print("FOR: " + flow.request.url) 
    print(flow.request.method + " " + flow.request.path + " " + flow.request.http_version) 

    print("-"*50 + "request headers:") 
    for k, v in flow.request.headers.items(): 
     print("%-20s: %s" % (k.upper(), v)) 

    print("-"*50 + "response headers:") 
    for k, v in flow.response.headers.items(): 
     print("%-20s: %s" % (k.upper(), v)) 
     print("-"*50 + "request headers:") 

Командная строка:

mitmdump -q -v -s parse_headers.py -R http://localhost:9200 -p 30001

Выход:

================================================== 
GET/HTTP/1.1 
--------------------------------------------------request headers: 
CONTENT-TYPE  : application/json 
ACCEPT    : application/json 
USER-AGENT   : Jakarta Commons-HttpClient/3.1 
HOST    : localhost 
--------------------------------------------------response headers: 
CONTENT-TYPE  : application/json; charset=UTF-8 
CONTENT-LENGTH  : 327 

 Смежные вопросы

  • Нет связанных вопросов^_^