aboutsummaryrefslogtreecommitdiffstats
path: root/extcap
diff options
context:
space:
mode:
authorFlorian Bezold <florian.bezold@esrlabs.com>2017-12-07 08:54:41 +0100
committerAnders Broman <a.broman58@gmail.com>2018-01-02 04:29:48 +0000
commit7dcf57719f6470cdfab4e3972d30097840b6fb11 (patch)
tree4a2cac562ec031192ffdb6bed4989de81977fc2d /extcap
parent4b7700db4b4a352db05e59e48cb729045e805295 (diff)
androiddump: Support older on-target tcpdump versions
The output of 'tcpdump -D' only outputs interface flags from Android 7 onwards. Since it would be sad to lose the great androiddump support for all older devices because of this, the logic is extended so that it lists all interfaces if no '[' and ']' is found in the output. Also, the used regex seemed to require an interface description, which might not exist (even with new tcpdump versions). Now, interfaces without description are not filtered. Change-Id: I92b550a37b9bc0d0142aed68ee98f26de79be759 Reviewed-on: https://code.wireshark.org/review/24720 Reviewed-by: Michael Mann <mmann78@netscape.net> Petri-Dish: Michael Mann <mmann78@netscape.net> Tested-by: Petri Dish Buildbot Reviewed-by: Anders Broman <a.broman58@gmail.com>
Diffstat (limited to 'extcap')
-rw-r--r--extcap/androiddump.c7
1 files changed, 5 insertions, 2 deletions
diff --git a/extcap/androiddump.c b/extcap/androiddump.c
index 33a82f0720..e7033de3c1 100644
--- a/extcap/androiddump.c
+++ b/extcap/androiddump.c
@@ -887,7 +887,7 @@ static void new_fake_interface_for_list_dlts(extcap_parameters * extcap_conf,
static int add_tcpdump_interfaces(extcap_parameters * extcap_conf, const char *adb_server_ip, unsigned short *adb_server_tcp_port, const char *serial_number)
{
static const char *const adb_tcpdump_list = "shell:tcpdump -D";
- static const char *const regex_ifaces = "\\d+\\.(?<iface>\\S+)\\s+?(?:(?:\\(.*\\))*)\\s*?\\[(?<flags>.*?)\\]";
+ static const char *const regex_ifaces = "\\d+\\.(?<iface>\\S+)(\\s+?(?:(?:\\(.*\\))*)(\\s*?\\[(?<flags>.*?)\\])?)?";
static char recv_buffer[PACKET_LENGTH];
char *response;
gssize data_length;
@@ -897,6 +897,7 @@ static int add_tcpdump_interfaces(extcap_parameters * extcap_conf, const char *a
GMatchInfo *match = NULL;
char* tok;
char iface_name[80];
+ gboolean flags_supported;
sock = adb_connect_transport(adb_server_ip, adb_server_tcp_port, serial_number);
if (sock == INVALID_SOCKET) {
@@ -919,6 +920,8 @@ static int add_tcpdump_interfaces(extcap_parameters * extcap_conf, const char *a
return EXIT_CODE_GENERIC;
}
+ flags_supported = (strstr(response, "[") != 0) && (strstr(response, "]") != 0);
+
tok = strtok(response, "\n");
while (tok != NULL) {
g_regex_match(regex, tok, (GRegexMatchFlags)0, &match);
@@ -926,7 +929,7 @@ static int add_tcpdump_interfaces(extcap_parameters * extcap_conf, const char *a
gchar *iface = g_match_info_fetch_named(match, "iface");
gchar *flags = g_match_info_fetch_named(match, "flags");
- if (strstr(flags, "Up")) {
+ if (!flags_supported || strstr(flags, "Up")) {
g_snprintf(iface_name, sizeof(iface_name), INTERFACE_ANDROID_TCPDUMP_FORMAT, iface);
new_interface(extcap_conf, iface_name, iface, serial_number, "Android tcpdump");
}