# tcpdump **Repository Path**: Fang3s/tcpdump ## Basic Information - **Project Name**: tcpdump - **Description**: 为了编译android5.0各架构(arm和x86)可用的tcpdump来抓包 LOCAL_CFLAGS += -pie -fPIE
LOCAL_LDFLAGS += -pie -fPIE - **Primary Language**: Android - **License**: GPL-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 4 - **Forks**: 0 - **Created**: 2015-05-11 - **Last Updated**: 2024-06-01 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README #tcpdump ## 各模块版本号 1. tcpdump-4.7.4 http://www.tcpdump.org/ 2. libpcap-1.6.2 http://www.tcpdump.org/ 3. openssl https://github.com/eighthave/openssl-android ###github mirrored from google https://github.com/android/platform_external_tcpdump mirrored from https://android.googlesource.com/platform/external/tcpdump.git https://github.com/android/platform_external_libpcap mirrored from https://android.googlesource.com/platform/external/libpcap.git https://github.com/android/platform_external_openssl mirrored from https://android.googlesource.com/platform/external/openssl.git ###openssl http://www.openssl.org/source/ 5262089 Mar 19 13:53:47 2015 openssl-1.0.2-latest.tar.gz 5262089 Mar 19 13:53:47 2015 openssl-1.0.2a.tar.gz (MD5) (SHA1) (PGP sign) [LATEST] ## 编译 全部编译完需要等好几以致十几分钟,所以在jni\Application.mk文件中的APP_ABI = armeabi armeabi-v7a x86会编译几个版本,按需修改。 注意:就我编译而言,有一些错误,最好看一下,不然编译出错浪费时间。 1. 对于[1]和[2],编译路径(工程路径D:\Developer\workspace\ADemo)需要根据工程位置修改或者直接和这里相同路径。 本来想用语法解决,可是例如NDK_PROJECT_PATH := $(LOCAL_PATH)/jni/openssl我用ls来查看结果,正确,编译时就不正确,目前不明。 2. 对于[3],缺少文件已经补上。 3. 对于[4],armeabi和x86版,目前不明的编译错误,需提前注意。 [1] 文件D:\Developer\workspace\ADemo\jni\Android.mk文件修改位置: ```makefile LOCAL_C_INCLUDES += D:\Developer\workspace\ADemo\jni\libpcap\ D:\Developer\workspace\ADemo\jni\openssl\include tcpdump_CSRC2 = print-loopback.c print-aoe.c print-m3ua.c print-smtp.c print-http.c \ print-ftp.c print-rtsp.c print-geneve.c print-ahcp.c print-pktap.c ``` [2] 文件D:\Developer\workspace\ADemo\jni\openssl\Android.mk添加如下: ```makefile NDK_PROJECT_PATH := $(MY_WORK_DIR_PATH)/jni/openssl NDK_PROJECT_PATH := D:\Developer\workspace\ADemo\jni\openssl $(info >>>>>>>[$(TARGET_ARCH)][$(LOCAL_PATH)]NDK_PROJECT_PATH = $(NDK_PROJECT_PATH)) ``` [3] 其实这些都是执行脚本自动生成的 (1) libpcap模块从Android源/extern/libpcap摘取如下文件: #include "version.h" static const char pcap_version_string[] = "libpcap version 1.0.2"; version.c tokdefs.h grammar.c bpf_filter.c (2) tcpdump模块从Android源/extern/tcpdump摘取如下文件: version.c [4] 如果在编译pcap-usb-linux.c出现如下错误 ``` [armeabi] Compile thumb : pcap <= pcap-linux.c D:/Developer/workspace/ADemo/jni/libpcap/pcap-linux.c:113:0: warning: "_GNU_SOURCE" redefined [enabled by default] :0:0: note: this is the location of the previous definition [armeabi] Compile thumb : pcap <= pcap-usb-linux.c In file included from D:/Developer/ndk/android-ndk-r10c/platforms/android-21/arch-arm/usr/include/stdlib.h:34:0, from D:/Developer/workspace/ADemo/jni/libpcap/pcap-usb-linux.c:54: D:/Developer/ndk/android-ndk-r10c/platforms/android-21/arch-arm/usr/include/string.h:80:15: error: expected declaration specifiers or '...' before '(' token D:/Developer/ndk/android-ndk-r10c/platforms/android-21/arch-arm/usr/include/string.h:80:15: error: expected declaration specifiers or '...' before '(' token D:/Developer/ndk/android-ndk-r10c/platforms/android-21/arch-arm/usr/include/string.h:80:15: error: expected declaration specifiers or '...' before '(' token D:/Developer/ndk/android-ndk-r10c/platforms/android-21/arch-arm/usr/include/string.h:80:15: error: expected ')' before ',' token make.exe: *** [obj/local/armeabi/objs/pcap/pcap-usb-linux.o] Error 1 ``` 可以对所在NDK库,如 文件D:\Developer\ndk\android-ndk-r10c\platforms\android-21\arch-arm\usr\include\string.h注释掉如下: ```c //extern size_t strlcpy(char* __restrict, const char* __restrict, size_t); ``` 目前不明,strlcpy为啥会出现如此错误 ##Snippet ```makefile $(info >>>>>>>[$(TARGET_ARCH)]LOCAL_PATH = $(LOCAL_PATH), APP_PROJECT_PATH = $(APP_PROJECT_PATH)) MY_WORK_DIR_PATH := $(shell pwd) $(info >>>>>>>[$(TARGET_ARCH)][$(MY_WORK_DIR_PATH)]$(MY_WORK_DIR_PATH)/../../) ``` ##题外 今天把手机更新了一下,竟然一下从4.1更到了5.0.2LRX22G 1. 发现tcpdump不行了。 2. getRuningTasks也不好使了,需要新权限REAL_GET_TASKS。其实旧的GET_TASKS也行,但是需要满足isUidPrivileged(callingUid)。 即使添加了新权限,获取不到其他用户的情况,只有自己和Home的。 ```java //ActivityManagerService.java public List getRecentTasks(int maxNum, int flags, int userId) { //... // Only add calling user or related users recent tasks if (!includedUsers.contains(Integer.valueOf(tr.userId))) { if (DEBUG_RECENTS) Slog.d(TAG, "Skipping, not user: " + tr); continue; } //... // If the caller doesn't have the GET_TASKS permission, then only // allow them to see a small subset of tasks -- their own and home. //... } ```