Как захватить заголовки HTTP-запроса/ответа с помощью mitmproxy?

Мне удалось захватить трафик HTTP(s) со смартфона, а также сохранить этот трафик с помощью mitmdump с помощью команды

mitmdump -w outfile

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


person sfactor    schedule 03.07.2015    source источник
comment
фильтр уже пробовал? mitmproxy.org/doc/features/filters.html   -  person Marged    schedule 03.07.2015


Ответы (3)


Еще один производный фрагмент, основанный на предыдущих ответах и ​​обновленный до 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
person user553965    schedule 11.07.2017
comment
Очень хорошо. Я написал несколько инструкций о том, как развернуть это, и поправил несколько мелких вещей в вашем скрипте: .github.com/tomsaleeba/c463550b43eb9c58d8b415523c49f70b - person Tom Saleeba; 30.01.2019


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

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

Я нашел решение в 'слишком много значений для распаковки', повторение dict. key=›string, value=›list и изменил код следующим образом:

[root@npmjs 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
person Marcello de Sales    schedule 18.10.2016