У меня была такая же проблема. Запустите двоичный файл airmon-ng:
sudo airmon-ng start wlan0.
Виртуальный интерфейс поверх wlan0 будет создан с включенным режимом монитора.
Результат, который я получил с помощью ifconfig, показан ниже.
mon0 Link encap:UNSPEC HWaddr 88-9F-FA-79-66-C1-3A-30-00-00-00-00-00-00-00-00
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:2695503 errors:0 dropped:1416652 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:596242234 (596.2 MB) TX bytes:0 (0.0 B)
Затем откройте wirehark и выберите этот интерфейс для захвата пакетов в режиме мониторинга.
Перенаправление вывода adb shell ls /data/data | grep -i com.company
в файл и просмотрев его с помощью шестнадцатеричного редактора, я обнаружил, что к ним добавлен возврат каретки в стиле Windows \r\n
(0x0D 0x0A). Таким образом, избавление от \r
с помощью tr -d '\r'
решило проблему.
Вся команда с использованием for
(из ответа Stéphane Chazelas ):
for x in $(adb shell ls /data/data | grep -i com.company | tr -d '\r'); do adb uninstall $x; done
Или аналогичным образом с использованием xargs
:
adb shell ls /data/data | grep -i com.company | tr -d '\r' | xargs -r -n1 adb uninstall
Другой вариант (как любезно объяснено Stéphane Chazelas в комментариях ниже) полностью отключает \r
с помощью stty -opost
, хотя для этого, скорее всего, требуется busybox
(или альтернатива, такая как toybox
) для установки на Android-устройство.
$ adb shell echo test | sed -n l
test\r$
$ adb shell 'busybox stty -opost; echo test' | sed -n l
test$
Хотя проблема оказалась вызванной символами CR в adb shell
выводе (, вставленном дисциплиной строки tty pty, созданной в целевой системе Android (, см. здесь для получения более подробной информации )), другое возможное объяснение (, и я оставлю его там для будущих читателей, так как это общая проблема с xargs
), которая могла быть в:
adb shell ls /data/data | grep -i com.company | xargs -n1 adb uninstall
В зависимости от реализации xargs
stdin adb
будет либо /dev/null
, либо конвейером из grep
. В любом случае это не будет tty, и, возможно, поэтому adb
дает сбой, если предполагается, что он сможет взаимодействовать с пользователем.
С GNU xargs
и оболочкой с поддержкой замены процесса (, такой как zsh
), вы можете изменить его на:
xargs -n1 -ra <(adb shell ls /data/data | grep -i com.company) adb uninstall
В этом случае xargs
считывает список из файла, указанного в качестве аргумента для -a
, что позволяет вам не трогать стандартный ввод.
Или, поскольку вы упомянули zsh
, вы могли бы использовать:
autoload zargs # best in ~/.zshrc
zargs -L1 $(adb shell ls /data/data | grep -i com.company) -- adb uninstall
(использование -L
вместо -n
, так как zargs
-n
ограничивает общее количество аргументов до adb
(, включая uninstall
один ), что означает, что мы нужно-n 2
).
Или просто используйте цикл, который в этом случае будет еще короче и понятнее:
for x ($(adb shell ls /data/data | grep -i com.company)) adb uninstall $x