2017-02-20 3 views
0

Мне интересно сделать программу на C#, которая сможет захватить сетевой трафик с устройства Android. Используя ADB, я могу перенаправить трафик с устройства на стандартный вывод Windows. Затем выход будет перенаправлен в Wireshark, который предварительно настроен для прослушивания стандартного вывода.SharpPcap - захват со стандартного вывода

Ниже команды я использую, только в случае, если кто-то нуждается в

В первом окне CMD

adb shell "tcpdump -n -s 0 -w - | nc -l 11233" 

Во втором окне CMD

adb forward tcp:11233 tcp:11233 && nc 127.0.0.1 11233 | wireshark -k -S -i - 

Вот мой вопрос ,

Я использую SharpPcap для захвата сетевого трафика в моей программе. В настоящее время я могу получить пакет из своего сетевого адаптера, то есть через Ethernet или Wi-Fi. Но, как вы можете видеть, сетевой трафик перенаправляются от Android устройства на стандартный вывод после этой команды

adb forward tcp:11233 tcp:11233 && nc 127.0.0.1 11233 

и вывода этой команды будет ввод следующих один как Wireshark настроен на прослушивание на стандартный вывод по " -i - "

Каждый раз, когда выполняются 2 над командами, открывается один экземпляр окна Wireshark для захвата пакетов. Это не может быть применено к моей программе.

Идея заключается в том, чтобы открыть форму, используя SharpPcap для захвата пакетов из стандартного вывода

Кто-нибудь знает, как это сделать? Любая другая идея также приветствуется.

Большое спасибо !!!

+0

Я автор sharppcap. Знаете ли вы, какой формат используется для stdout, переданного в wirehark? Если бы вы это сделали, вы могли бы сделать приложение C#, которое получило бы их и передало их вместе с PacketDotNet для синтаксического анализа. –

+0

Привет Крис. Формат пакета полностью совпадает с тем, что вы фиксируете трафик из своей локальной сети. Как вы можете видеть, stdout передается непосредственно на wirehark и может быть декодирован и отображен в wirehark как обычный сетевой трафик. Если я могу получить один пакет за раз, я думаю, PacketDotNet может помочь разобрать. Но в этой ситуации я не мог использовать ICaptureDevice от SharpPcap, чтобы иметь RawCapture с помощью GetNextPacket(), поскольку здесь нет устройства, кроме как захвата из STDOUT. Есть ли у вас предложения? Благодарю. –

+0

@ChrisMorgan: У меня есть массив байтов, содержащий все пакеты, прочитанные из STDOUT. Я проверил несколько раз, и мой массив байтов имеет тот же формат с журналом pcap. Я предполагаю, что он может быть декодирован с помощью PacketDotNet. Любой совет? –

ответ

0

Можете ли вы создать fifo, используя mkfifo и имеете nc пишите на fifo вместо stdout? Тогда просто прокрутите прокрутку из филона вместо того, чтобы от stdin? Что-то как:

mkfifo sharkfin 
wireshark -k -S -i sharkfin & 
adb forward tcp:11233 tcp:11233 && nc 127.0.0.1 11233 > sharkfin 

В случае Wireshark останавливает запись, и вы не хотите его, вы также можете выполнить следующую команду только после запуска Wireshark, чтобы гарантировать, что Wireshark не получает EOF.

cat > sharkfin & 
+0

Привет Кристофер. Конечно, Wireshark всегда будет помогать, даже в случае stdout. Но дело в том, чтобы пересылать пакеты в мою программу. Я нашел способ захватить пакеты из stdout, но кажется, что этого недостаточно для моей цели, поскольку SharpPcap не должен анализировать SIP-пакеты. Вы знаете, как интегрировать Wireshark в программу C#? –

+0

@ Viet-AnhDinh вы могли бы реализовать SIP-парсер для PacketDotNet. Я был бы готов к заключению контрактов на внедрение парсера. –

+0

@ChrisMorgan: Я нашел другой способ, которым tshark соответствует всем моим потребностям. Я могу вернуться с SSP-парсером для PacketDotNet после завершения моего проекта. Свяжитесь с вами в то время. Спасибо за приглашение. –

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