Как я могу захватить сетевой трафик одного процесса?

Пакеты Android, файлы .apk, представляют собой совершенно другой формат упаковки, чем формат упаковки Ubuntu, файлы .deb.

Помимо различий в упаковке, пакеты Android скомпилированы и настроены для операционной системы Android, toolchain , и архитектура ( .apk ), которая отличается от большинства систем Ubuntu, которые представляют собой 32-разрядную или 64-разрядную архитектуру Intel.

1
задан 26 December 2013 в 03:26

19 ответов

Чтобы запустить и контролировать новый процесс:

strace -f -e trace=network -s 10000 PROCESS ARGUMENTS

Чтобы контролировать существующий процесс с известным PID:

strace -p $PID -f -e trace=network -s 10000
-f для «следовать новым процессам «-e определяет фильтр -s устанавливает предел строк более чем 32 -p принимает идентификатор процесса для присоединения к
103
ответ дан 26 May 2018 в 00:35
  • 1
    Это полезно, потому что его можно использовать без доступа root или специальных разрешений (в некоторых дистрибутивах Linux, в любом случае - на Ubuntu вам могут потребоваться специальные разрешения). – Robin Green 7 June 2012 в 14:24
  • 2
    Это также полезно, потому что его можно запустить с уже запущенным процессом и доступно практически на любом Linux-боксе. – zakmck 22 September 2015 в 12:24

Я знаю, что эта ветка немного устарела, но я думаю, что это может помочь некоторым из вас:

Если ваше ядро ​​позволяет это, захват сетевого трафика одного процесса очень легко выполняется, запустив указанный процесс в изолированном пространстве имен в сети и использование wirehark (или других стандартных сетевых инструментов) в указанном пространстве имен.

Настройка может показаться немного сложной, но как только вы ее поймете и познакомитесь с ней, облегчит вашу работу.

Чтобы это сделать:

создать пространство имен тестовой сети:
ip netns add test
создать пару виртуальных сетевых интерфейсов (veth-a и veth- b):
ip link add veth-a type veth peer name veth-b
изменить активное пространство имен интерфейса veth-a:
ip link set veth-a netns test
настроить IP-адреса виртуальных интерфейсов:
ip netns exec test ifconfig veth-a up 192.168.163.1 netmask 255.255.255.0
ifconfig veth-b up 192.168.163.254 netmask 255.255.255.0
настроить маршрутизацию в пространстве имен тестов:
ip netns exec test route add default gw 192.168.163.254 dev veth-a
активировать ip_forward и установить правило NAT для перенаправления трафика, поступающего из созданного вами пространства имен (вам необходимо настроить сетевой интерфейс и IP-адрес SNAT):
echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -t nat -A POSTROUTING -s 192.168.163.0/24 -o <your internet interface, e.g. eth0> -j SNAT --to-source <your ip address>
(Вы также можете использовать правило MASQUERADE, если вы предварительно fer), наконец, вы можете запустить процесс, который хотите проанализировать в новом пространстве имен, и wirehark тоже:
ip netns exec test thebinarytotest
ip netns exec test wireshark
Вам нужно будет контролировать интерфейс veth-a.
44
ответ дан 26 May 2018 в 00:35
  • 1
    Отличная идея, но остерегайтесь «ограничений». Поскольку это отдельное пространство имен, вы не можете связываться с локальными процессами в пространстве имен по умолчанию, используя адреса loopback (ы) или сокеты домена UNIX. Последнее влияет на связь через D-Bus. – Lekensteyn 15 February 2015 в 18:53
  • 2
    @Lekensteyn вы все равно можете использовать сокеты домена unix через сетевые пространства имен afaik. Файловая система не изолирована ими. – randunel 29 January 2016 в 21:42
  • 3
    @ randunel, я должен был быть более точным. Я хотел сказать, что сокеты домена Unix в «абстрактном пространстве имен сокетов» (который не использует файловую систему) напрямую не могут быть доступны между пространствами имен. В качестве обходного пути вы можете использовать прокси-сервер, такой как socat . – Lekensteyn 30 January 2016 в 17:36
  • 4
    Какой IP-адрес вы используете с аргументом --to-source в iptables? Является ли это IP-адресом интерфейса, который вы передаете в параметр -o, IP-адрес, который вы составляете, или ??? Я попробовал версию маскарада, которая не нужна --to-source, , как описано здесь , и это сработало! – ntc2 2 February 2017 в 07:03
  • 5
    Все это, кажется, требует доступа root. – simplegamer 5 October 2017 в 20:23
netstat -taucp | grep <pid or process name>

Это покажет соединения, которые делает приложение, включая используемый порт.

13
ответ дан 26 May 2018 в 00:35
  • 1
    Это покажет соединения, которые существуют для этого момента, но он не будет предоставлять журнал самого трафика. – Kees Cook 6 November 2010 в 21:36
  • 2
    Не уверен в комментарии Kees Cook. Простой netstat показывает информацию о соединениях на мгновение, но с флагом -c вы получаете снимок этого состояния каждую секунду (см. «Man netstat»). Возможно, у него нет всего трафика, но он не является уникальным снимком соединений. – tremendows 12 December 2013 в 21:30
  • 3
    Ну, я уверен. Это будет not захватить весь сетевой трафик процесса. – Reinier Post 10 June 2016 в 12:31
  • 1
    Большинство приложений не поддерживают указание исходного IP-адреса, но это может быть возможно при использовании контейнера с CLONE_NEWNET, но не CLONE_NEWNS. – Kees Cook 11 November 2010 в 10:14
  • 2
    Кроме того, вы можете создать пространство имен в сети и запустить приложение внутри него. Www.evolware.org/?p=293 – Flint 17 May 2014 в 09:29

Я пришел к аналогичной проблеме, и я смог разобраться с ней на основе этого ответа ioerror, используя NFLOG, как описано здесь:

# iptables -A OUTPUT -m owner --uid-owner 1000 -j CONNMARK --set-mark 1
# iptables -A INPUT -m connmark --mark 1 -j NFLOG --nflog-group 30 
# iptables -A OUTPUT -m connmark --mark 1 -j NFLOG --nflog-group 30 
# dumpcap -i nflog:30 -w uid-1000.pcap

Тогда вы можете создать запуск процесса, о котором идет речь из учетной записи пользователя, которая ничего не делает - и voila, вы только что выделили и захватили трафик из одного процесса.

Просто хотел отправить сообщение на случай, если это поможет кому угодно.

8
ответ дан 26 May 2018 в 00:35

Это грязный хак, но я бы предложил либо переадресацию, либо лог-цель с iptables для данного UID. например:

iptables -t nat -A OUTPUT -p tcp -m owner --uid-owner $USER -m tcp -j LOG 
iptables -t nat -A OUTPUT -p udp -m owner --uid-owner $USER -m udp -j LOG 

Возможно, стоит посмотреть на что-то вроде «-log-tcp-sequence», «-log-tcp-options», «-log-ip-options» , '--log-uid' для этой цели журнала. Хотя я подозреваю, что это только поможет вам опубликовать процесс pcap, который включает в себя массу других данных.

Цель NFLOG может быть полезна, если вы хотите пометить пакеты, а затем некоторые помеченные пакеты будут отправлены по сети сокет в выбранный вами процесс. Интересно, будет ли это полезно для взлома чего-то с помощью wirehark и вашего конкретного приложения, работающего как конкретный пользователь?

5
ответ дан 26 May 2018 в 00:35
  • 1
    но это работает только для исходящих, а как насчет входящих? – resultsway 20 October 2014 в 22:14

Вы можете попробовать tracedump - http://mutrics.iitis.pl/tracedump

Он делает именно то, что вы хотите, вы можете либо дать ему идентификатор процесса, либо программу для запуска.

]
4
ответ дан 26 May 2018 в 00:35
  • 1
    Хороший проект, но ... " Tracedump в настоящее время работает только на 32-битных хостах Linux " убивает его для меня, к сожалению. – gertvdijk 30 September 2014 в 18:29

Попробуйте запустить процесс, который вас интересует в strace:

strace ping www.askubuntu.com

Он даст вам очень подробную информацию о том, что делает ваш процесс. Поскольку процесс может открывать любые порты, которые он хочет в любом месте, используя предопределенный фильтр, вы можете что-то пропустить.

Другим подходом было бы использование урезанной виртуальной машины или тестовой машины в вашей сети и поместите на него свой процесс по отдельности. Затем вы можете просто использовать strace , чтобы поймать все с этой машины. Вы будете уверены, что захваченный вами трафик будет иметь значение.

4
ответ дан 26 May 2018 в 00:35
  • 1
    отлично работает для osx – somid3 19 June 2014 в 01:41
  • 2
    Добавление в сеть «-e trace = network» сократите часть вывода, за счет потери данных, которые фактически записаны в сеть. Если вас беспокоит только количество открываемых сокетов, или что-то подобное, это упрощает работу. – dannysauer 26 February 2015 в 00:20

Основываясь на ответе ioerror, я подозреваю, что вы можете использовать iptables --uid-owner для установки маркера в трафике, а затем вы можете попросить wirehark захватить только трафик с этим маркером. Возможно, вы сможете использовать DSCP (маркер дифференциальных служб), идентификатор потока или маркер qos.

Или вы можете использовать это, чтобы отправить эти пакеты из другого интерфейса, а затем захватить только этот интерфейс .

3
ответ дан 26 May 2018 в 00:35

errorshark ошибка # 1184 - это эта функция. Он еще не реализован. Код скопирован от пользователя cmanynard по адресу ask.wireshark.org

2
ответ дан 26 May 2018 в 00:35

Я написал приложение C, которое делает то, что описано в большом ответе выше felahdab!

См. здесь: nsntrace github repo

2
ответ дан 26 May 2018 в 00:35
  • 1
    Это круто, но я думаю, было бы неплохо включить некоторые подробности о том, как их получить и использовать. :) – Zanna 17 July 2016 в 12:33
  • 2
    Благодаря! Я предоставил ссылку на репозиторий github, в котором содержится файл README.md, в котором есть использование и примеры, а также инструкции по загрузке! – Jonas Danielsson 18 July 2016 в 12:49

Возможно, iptables и ulog могут работать? Не то, чтобы у меня был точный рецепт, но я думаю, что iptables может соответствовать процессам, после совпадения вы можете использовать ulog.

0
ответ дан 26 May 2018 в 00:35

Я думаю, вы можете создать сценарий оболочки, чтобы выполнить цикл выполнения netstat и записать его в текстовый файл. Что-то вроде (очень грубые шаги):

echo "press q to quit"
while [ <q is not pressed>]
do
    `netstat -taucp | grep <pid or process name> 1>>logfile.txt`
done

Я не программист, поэтому я не могу это уточнить. Но кто-то здесь может начать с того места, где я остановился, и создать для вас рабочий сценарий.

-1
ответ дан 26 May 2018 в 00:35
  • 1
    Не достаточно хорош. Вопрос заключается в том, чтобы захватить весь сетевой трафик, а не только то, что происходит в тот момент, когда вы проверяете. – Reinier Post 10 June 2016 в 12:33

Возможно, iptables и ulog могут работать? Не то, чтобы у меня был точный рецепт, но я думаю, что iptables может соответствовать процессам, после совпадения вы можете использовать ulog.

0
ответ дан 26 May 2018 в 00:35

Возможно, iptables и ulog могут работать? Не то, чтобы у меня был точный рецепт, но я думаю, что iptables может соответствовать процессам, после совпадения вы можете использовать ulog.

0
ответ дан 26 May 2018 в 00:35

Возможно, iptables и ulog могут работать? Не то, чтобы у меня был точный рецепт, но я думаю, что iptables может соответствовать процессам, после совпадения вы можете использовать ulog.

0
ответ дан 26 May 2018 в 00:35

Возможно, iptables и ulog могут работать? Не то, чтобы у меня был точный рецепт, но я думаю, что iptables может соответствовать процессам, после совпадения вы можете использовать ulog.

0
ответ дан 26 May 2018 в 00:35

Возможно, iptables и ulog могут работать? Не то, чтобы у меня был точный рецепт, но я думаю, что iptables может соответствовать процессам, после совпадения вы можете использовать ulog.

0
ответ дан 26 May 2018 в 00:35

Возможно, iptables и ulog могут работать? Не то, чтобы у меня был точный рецепт, но я думаю, что iptables может соответствовать процессам, после совпадения вы можете использовать ulog.

0
ответ дан 26 May 2018 в 00:35

Другие вопросы по тегам:

Похожие вопросы: