Hello,
I have downloaded the libpcap in external folder from android source code using the Git and
repo. I used the toolcains of ndk (android-ndk-r5b) to compile the library following these
steps:
./configure --prefix=path-to-android-src/mydroid/prebuilt/linux-x86/toolchain/arm-eabi-4.4.3/bin
make clean
make
make install
and then a file libpcap.a is produced.
I have make a simple sniffer using libpcap (sniffer.c). When I try to compile it, these errors occur:
agcc sniffer.c libpcap.a
sniffer.c:9:18: error: pcap.h: No such file or directory
sniffer.c:19: warning: 'struct pcap_pkthdr' declared inside parameter list
sniffer.c:19: warning: its scope is only this definition or declaration, which is probably not what you want
sniffer.c: In function 'processPacket':
sniffer.c:23: warning: incompatible implicit declaration of built-in function 'printf'
sniffer.c:24: error: dereferencing pointer to incomplete type
sniffer.c:26: error: dereferencing pointer to incomplete type
sniffer.c:33: error: dereferencing pointer to incomplete type
sniffer.c: In function 'main':
sniffer.c:45: error: 'pcap_t' undeclared (first use in this function)
sniffer.c:45: error: (Each undeclared identifier is reported only once
sniffer.c:45: error: for each function it appears in.)
sniffer.c:45: error: 'descr' undeclared (first use in this function)
sniffer.c:46: error: 'PCAP_ERRBUF_SIZE' undeclared (first use in this function)
sniffer.c:62: warning: incompatible implicit declaration of built-in function 'printf'
sniffer.c:66: warning: incompatible implicit declaration of built-in function 'fprintf'
sniffer.c:66: error: 'stderr' undeclared (first use in this function)
sniffer.c:72: warning: incompatible implicit declaration of built-in function 'fprintf'
when I try to produce the object code in advance:
agcc -c sniffer.o sniffer.c
the same errors occured.
Can someone explain me how to solve this problem?
here is the alias of agcc I use in bashrc file:
./configure --prefix=/home/petsas/projects/mobile-attacks/mydroid/prebuilt/linux-x86/toolchain/arm-eabi-4.4.3/bin/
Also, I have attached a file with the outputs of the commands above: configure, make and make install.
Thank you in advance!
I used the options -I and -L to specify the include and library files, and these errors are gone now..
Here is my new error log:
agcc --static -I /home/petsas/projects/mobile-attacks/mydroid/prebuilt/linux-x86/toolchain/arm-eabi-4.4.3/bin/include -L /home/petsas/projects/mobile-attacks/mydroid/prebuilt/linux-x86/toolchain/arm-eabi-4.4.3/bin/lib -o sniffer sniffer.c libpcap.a
/home/petsas/projects/mobile-attacks/android-ndk-r5b/toolchains/arm-linux-androideabi-4.4.3/prebuilt/linux-x86/bin/../lib/gcc/arm-linux-androideabi/4.4.3/../../../../arm-linux-androideabi/bin/ld: libpcap.a(pcap-linux.o): Relocations in generic ELF (EM: 3)
/home/petsas/projects/mobile-attacks/android-ndk-r5b/toolchains/arm-linux-androideabi-4.4.3/prebuilt/linux-x86/bin/../lib/gcc/arm-linux-androideabi/4.4.3/../../../../arm-linux-androideabi/bin/ld: libpcap.a(pcap-linux.o): Relocations in generic ELF (EM: 3)
/home/petsas/projects/mobile-attacks/android-ndk-r5b/toolchains/arm-linux-androideabi-4.4.3/prebuilt/linux-x86/bin/../lib/gcc/arm-linux-androideabi/4.4.3/../../../../arm-linux-androideabi/bin/ld: libpcap.a(pcap-linux.o): Relocations in generic ELF (EM: 3)
libpcap.a: could not read symbols: File in wrong format
collect2: ld returned 1 exit status
any ideas?
I'm not 100% sure, but if you want to build native library for android you shouldn't use ./configure script. You should create Android.mk file and build library using it. Android.mk file is a native build environment for Android.
Refer to android-ndk\docs\ANDROID-MK.html for more information.
Yeah!
Thank you Zuljin!!!
I put the libpcap direcotry into the android-ndk-r5b/samples, I modified a bit the Android.mdk
and the structure of the direcotry, so as to look like the other ones inside the samples dir and
I used the ndk-build command inside the android-ndk-r5b direcory:
ndk-build -C samples/android-ndk-r5b
All worked fine! I was able to produce a libpicap.so file, and put it in the phone using the
commands:
in android:
# su
# mount -o,rw remount /dev/block/mtdblock4 /system/lib
in my Desktop:
$ adb push libpcap.so /system/lib/
I made a simple sniffer, I compiled and linked with the libpcap.so and works perfectly in
my HTC Hero!
Hi,
I have also trying to build this libpcap on Android.
I have downloaded the source from platform_external_libpcap and put all these files under jni directory for a android-ndk project (default) and tried building using ndk-build script.
But nothing happens but the control returns plainly without compiling the .so or .a file.
Can you tell me how you organized the folders in ndk project.?
regards,
Vijayan
Hello Vijayan,
You have to make a directory i.e. libpcap and then inside this directory,
you've got to create another one named as jni and put there all the source
files, as you have done. Then, inside this directory (jni) create a file named as
Android.mk so that it contains the follow lines:
LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)
LOCAL_SRC_FILES:=\
/bpf_dump.c\
/bpf/net/bpf_filter.c\
/bpf_image.c\
/etherent.c\
/fad-gifc.c\
/gencode.c\
/grammar.c\
/inet.c\
/nametoaddr.c\
/optimize.c\
/pcap.c\
/pcap-linux.c\
/savefile.c\
/scanner.c\
/version.c
LOCAL_CFLAGS:=-O2 -g
LOCAL_CFLAGS+=-DHAVE_CONFIG_H -D_U_="__attribute__((unused))" -Dlinux -D__GLIBC__ -D_GNU_SOURCE
LOCAL_MODULE:= pcap
LOCAL_MODULE_FILENAME:= libpcap
LOCAL_LDLIBS := \
-ldl
include $(BUILD_SHARED_LIBRARY)
Then, you only have to type this command:
ndk-build -C <path-to-jni-direcotry>
That's all! Now, inside the libpcap directory, and in the path:
libpcap/libs/armeabi/ should have been created the file you want:
libpcap.so
Let me know if you have any problems,
Thanasis
Hi,
Thanks. Now I'm able to compile the libpcap.so.
using this .so I have compiled the jpcap-0.7 (C source fiiles) to generate libjpcap.so.
Then I have created my Sniffer Application on Android. I have added the jpcap.jar, jpcap.so and libpcap.so in the lib folder of my Application.
But when I call this line
NetworkInterface[] devices = JpcapCaptor.getDeviceList();
am getting the following runtime error:
FATAL EXCEPTION: main
java.lang.UnsatisfiedLinkError: getDeviceList
at jpcap.JpcapCaptor.getDeviceList(Native Method)
at com.example.snifferapp.SnifferApp.onCreate(SnifferApp.java:26)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1611)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1663)
at android.app.ActivityThread.access$1500(ActivityThread.java:117)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:931)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:123)
at android.app.ActivityThread.main(ActivityThread.java:3683)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:507)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
at dalvik.system.NativeStart.main(Native Method)
Click to expand...
Click to collapse
Can you tellme What is going wrong here ?
Thanks.
Vijay
Yes, I had the same problem with you when I tried to make a sniffing application
using another one known java wrapper of libpcap: the jNetPcap, and particularly
I couldn't get the devices through this call: Pcap.findAllDevs(alldevs, errbuf);
That's because, even if you have root privileges on the console of the phone, as
you have a rooted phone, you cannot raun an application as root. That's not possible.
You can do that, only if your application is signed with the key of the platform, that is
of the Android OS that runs inside your phone.. So, the only way is to built by yourself
the Android OS and put it into the mobile. And then you have to sign your application
with the key that you have used to sign the OS.
For more information you can look here:
http://stackoverflow.com/questions/5966603/jnetpcap-on-android-problem-with-findalldevs-method
Hi,
Thanks for your reply.
But its very confusing.
Can you tellme, Whether Its possible to run a client application into Android which can monitor the network traffic in the device by anymeans?
If then what are all the possible ways. (like jpcap, etc....)
My idea is to develop a simple client application. I cannot think of building the whole Android OS and loading it into each device.
Hope to get a reply.
Thanks,
Vijay
I haven't done it before, because I only experience with native
programs that do network monitoring..
I think there are two simple solutions here. The first one is what exactly
Shark does: A tcpdump is running in the background that produces
traffic traces (pcap files) and you can develop an application that in periodic
time intervals reads these files and produce some outputs to the user.
The other one solution I can imagine is to develop again a native sniffer in
C with libpcap and then for each packet you receive or better for a batch of
packets you receive, you can send it through sockets to you application for
further processing..
Hope that helps..
FYI: There is a new application in Android called faceniff that does the work of
firesheep. That is you can hijack web sessions from facebook users. How is it
possible this application to monitor the web traffic of the phone? I think that
uses a native sniffer for this.. I am not sure, but it is not open source..
Hi, I did the steps as you described above:
Create a dir 'libpcap' with subdir 'jni'
Download the 'platform_external_libpcap' from 'github.com/android/platform_external_libpcap' (based on original libpcap version 0.9.8) and put the files at 'libpcap/jni'
Change the 'Android.mk' (see post number 6 of this thread)
run 'path/to/ndk-build -C path/to/libpcap/ndk' (android-ndk-r6)
When I do the last step of this list no 'libpcap/libs/armeabi/libpcap.so' will be produced but I get this output (I can reproduce this behavior on ubuntu 10.04 x86_64 and on debian i586):
> <user>@<host>:~/android/libpcap$ path/to/android-ndk-r6/ndk-build -C /home/<user>/android/libpcap/jni
> make: Entering directory `/home/<user>/android/libpcap/jni'
> SharedLibrary : libpcap.so
> /home/<user>/android/libpcap/obj/local/armeabi/objs/pcap//grammar.o: In function `pcap_parse':
> /home/<user>/android/libpcap/jni/y.tab.c:1711: undefined reference to `pcap_lex'
> collect2: ld returned 1 exit status
> make: *** [/home/<user>/android/libpcap/obj/local/armeabi/libpcap.so] Error 1
> make: Leaving directory `/home/<user>/android/libpcap/jni'
Does someone know what this error means and how to solve this problem?
daim0nas said:
Yeah!
Thank you Zuljin!!!
I put the libpcap direcotry into the android-ndk-r5b/samples, I modified a bit the Android.mdk
and the structure of the direcotry, so as to look like the other ones inside the samples dir and
I used the ndk-build command inside the android-ndk-r5b direcory:
ndk-build -C samples/android-ndk-r5b
All worked fine! I was able to produce a libpicap.so file, and put it in the phone using the
commands:
in android:
# su
# mount -o,rw remount /dev/block/mtdblock4 /system/lib
in my Desktop:
$ adb push libpcap.so /system/lib/
I made a simple sniffer, I compiled and linked with the libpcapp.so and works perfectly in
my HTC Hero!
Click to expand...
Click to collapse
Can you post your libpcap for us please.
Hi!
I'm trying to compile my first cyanogen rom for my Galaxy 3 (i5800). I downloaded the Android source from androidarmv6 and the device folder from marcellusbe's repo and i edited it to include samsung fimg drivers (original device folders has openfimg which IMHO is still not good for daily usage because of lag, very limited opengles support etc...) and the device configuration and filesystem table to support MTD converted phones. At first compiling went pretty good i just got some: "Thumb does not support this addressing mode *" that i fixed by adding
Code:
LOCAL_CFLAGS += -marm
to involved Android.mk however after resolving those errors it started compiling host libraries and it started giving TONS of no such file or directory errors, but compilation didn't stop so i didn't touch anything, then this error appeared and i can't find any patch/solution/workaround:
Code:
target thumb C: libhardware_legacy <= hardware/libhardware_legacy/wifi/wifi.c
hardware/libhardware_legacy/wifi/wifi.c: In function 'update_ctrl_interface':
hardware/libhardware_legacy/wifi/wifi.c:473:5: warning: suggest parentheses around assignment used as truth value [-Wparentheses]
hardware/libhardware_legacy/wifi/wifi.c: In function 'wifi_start_supplicant':
hardware/libhardware_legacy/wifi/wifi.c:894:20: error: dereferencing pointer to incomplete type
hardware/libhardware_legacy/wifi/wifi.c:911:26: error: dereferencing pointer to incomplete type
make: *** [/home/francesco/cm10_port/cm_armv6/out/target/product/apollo/obj/SHARED_LIBRARIES/libhardware_legacy_intermediates/wifi/wifi.o] Error 1
I also downloaded the latest wifi.c from cyanogen github but nothing.
Someone knows how to resolve this?
Thanks in advance!
I am attempting to compile Python along with the modules "openssl pil zope2" for Android using the "Python-for-android" project (https://github.com/kivy/python-for-android).
However it is not successful and errors out with the below error:
Code:
Getting distribution for 'zope.security==3.7.4'.
In file included from
/home/zac/Documents/Projects/Apps/python-for-android/build/hostpython/Python-2.7.2/Include/Python.h:58:0,
from src/zope/security/_proxy.c:19:
/home/zac/Documents/Projects/Apps/python-for-android/build/hostpython/Python-2.7.2/Include/pyport.h:849:2:
error: #error "LONG_BIT definition appears wrong for platform (bad
gcc/glibc config?)."
[B]#error "LONG_BIT definition appears wrong for platform (bad gcc/glibc
config?)."[/B]
^
src/zope/security/_proxy.c: In function 'init_proxy':
src/zope/security/_proxy.c:1006:3: warning: dereferencing type-punned
pointer will break strict-aliasing rules [-Wstrict-aliasing]
Py_INCREF(&SecurityProxyType);
^
error: Setup script exited with error: command
'arm-linux-androideabi-gcc' failed with exit status 1
An error occurred when trying to install zope.security 3.7.4. Look
above this message for any errors that were output by easy_install.
While:
Installing test.
Getting distribution for 'zope.security==3.7.4'.
Error: Couldn't install: zope.security 3.7.4
What I am wondering is if anyone else has ever had a similar issue when trying to use the Android gcc, I have build zope.security just fine using the ARM gcc so it is not a platform issue but some bug/issue with the provided Android gcc in the NDK
Hi Everyone
I am fairly new to android customisation, rooting, etc. and have been playing around with creating a custom CyanogenMod kernel to support a TP-Link USB wifi dongle.
The primary reference article for this can be found here - http://forum.xda-developers.com/showthread.php?t=2338179. However I have made some changes as listed below.
Keen to hack this further and any advice or guidance will be greatly appreciated.
Technical Spec:
Ubuntu 12.04 (32 Bit)
Samsung S3 (Cyanogenmod ROM)
Kernel = https://github.com/CyanogenMod/android_kernel_samsung_smdk4412
.config = https://github.com/CyanogenMod/andr.../arch/arm/configs/cyanogenmod_i9300_defconfig
Note - There is no /proc/config.gz on my device, hence the above use of the config.
gcc-arm-linux-gnueabi libstdc++6 libncurses5 libncurses5-dev - exports correctly setup.
Objective
Getting an TP-Link TL-WN821N USB Wifi Dongle to work.
The relevant drivers are already available in mac80211 - http://www.aircrack-ng.org/doku.php?id=mac80211
Error Message
CC net/mac80211/agg-rx.o
CC net/mac80211/ibss.o
CC net/mac80211/mlme.o
net/mac80211/mlme.c: In function ‘ieee80211_mgd_auth’:
net/mac80211/mlme.c:2317:9: error: ‘struct cfg80211_auth_request’ has no member named ‘local_state_change’
net/mac80211/mlme.c: In function ‘ieee80211_assoc_done’:
net/mac80211/mlme.c:2419:2: warning: passing argument 2 of ‘cfg80211_send_rx_assoc’ from incompatible pointer type [enabled by default]
include/net/cfg80211.h:2802:6: note: expected ‘struct cfg80211_bss *’ but argument is of type ‘unsigned char *’
net/mac80211/mlme.c:2419:2: warning: passing argument 3 of ‘cfg80211_send_rx_assoc’ makes pointer from integer without a cast [enabled by default]
include/net/cfg80211.h:2802:6: note: expected ‘const u8 *’ but argument is of type ‘unsigned int’
net/mac80211/mlme.c:2419:2: error: too few arguments to function ‘cfg80211_send_rx_assoc’
include/net/cfg80211.h:2802:6: note: declared here
net/mac80211/mlme.c: In function ‘ieee80211_mgd_deauth’:
net/mac80211/mlme.c:2560:19: error: ‘struct cfg80211_deauth_request’ has no member named ‘bss’
net/mac80211/mlme.c:2561:30: error: ‘struct cfg80211_deauth_request’ has no member named ‘bss’
net/mac80211/mlme.c:2581:18: error: ‘struct cfg80211_deauth_request’ has no member named ‘bss’
net/mac80211/mlme.c:2600:4: error: implicit declaration of function ‘__cfg80211_auth_canceled’ [-Werror=implicit-function-declaration]
net/mac80211/mlme.c:2610:16: error: ‘struct cfg80211_deauth_request’ has no member named ‘local_state_change’
cc1: some warnings being treated as errors
make[2]: *** [net/mac80211/mlme.o] Error 1
make[1]: *** [net/mac80211] Error 2
make: *** [net] Error 2
franna81 said:
Hi Everyone
I am fairly new to android customisation, rooting, etc. and have been playing around with creating a custom CyanogenMod kernel to support a TP-Link USB wifi dongle.
The primary reference article for this can be found here - http://forum.xda-developers.com/showthread.php?t=2338179. However I have made some changes as listed below.
Keen to hack this further and any advice or guidance will be greatly appreciated.
Technical Spec:
Ubuntu 12.04 (32 Bit)
Samsung S3 (Cyanogenmod ROM)
Kernel = https://github.com/CyanogenMod/android_kernel_samsung_smdk4412
.config = https://github.com/CyanogenMod/andr.../arch/arm/configs/cyanogenmod_i9300_defconfig
Note - There is no /proc/config.gz on my device, hence the above use of the config.
gcc-arm-linux-gnueabi libstdc++6 libncurses5 libncurses5-dev - exports correctly setup.
Objective
Getting an TP-Link TL-WN821N USB Wifi Dongle to work.
The relevant drivers are already available in mac80211 - http://www.aircrack-ng.org/doku.php?id=mac80211
Error Message
CC net/mac80211/agg-rx.o
CC net/mac80211/ibss.o
CC net/mac80211/mlme.o
net/mac80211/mlme.c: In function ‘ieee80211_mgd_auth’:
net/mac80211/mlme.c:2317:9: error: ‘struct cfg80211_auth_request’ has no member named ‘local_state_change’
net/mac80211/mlme.c: In function ‘ieee80211_assoc_done’:
net/mac80211/mlme.c:2419:2: warning: passing argument 2 of ‘cfg80211_send_rx_assoc’ from incompatible pointer type [enabled by default]
include/net/cfg80211.h:2802:6: note: expected ‘struct cfg80211_bss *’ but argument is of type ‘unsigned char *’
net/mac80211/mlme.c:2419:2: warning: passing argument 3 of ‘cfg80211_send_rx_assoc’ makes pointer from integer without a cast [enabled by default]
include/net/cfg80211.h:2802:6: note: expected ‘const u8 *’ but argument is of type ‘unsigned int’
net/mac80211/mlme.c:2419:2: error: too few arguments to function ‘cfg80211_send_rx_assoc’
include/net/cfg80211.h:2802:6: note: declared here
net/mac80211/mlme.c: In function ‘ieee80211_mgd_deauth’:
net/mac80211/mlme.c:2560:19: error: ‘struct cfg80211_deauth_request’ has no member named ‘bss’
net/mac80211/mlme.c:2561:30: error: ‘struct cfg80211_deauth_request’ has no member named ‘bss’
net/mac80211/mlme.c:2581:18: error: ‘struct cfg80211_deauth_request’ has no member named ‘bss’
net/mac80211/mlme.c:2600:4: error: implicit declaration of function ‘__cfg80211_auth_canceled’ [-Werror=implicit-function-declaration]
net/mac80211/mlme.c:2610:16: error: ‘struct cfg80211_deauth_request’ has no member named ‘local_state_change’
cc1: some warnings being treated as errors
make[2]: *** [net/mac80211/mlme.o] Error 1
make[1]: *** [net/mac80211] Error 2
make: *** [net] Error 2
Click to expand...
Click to collapse
Exactly the same issue here, bump :/
When I had to build a mac80211 driver (rt2800usb), I had to apply the following changes on top of cm-10.2.0 (d6f2f4ae4e593067dc59e2ac63f022434199f673):
Code:
# Depends on 3.4 backport that breaks mac80211.
git revert d6f2f4ae4e593067dc59e2ac63f022434199f673 # "Add support for Note 8 (N5100 and N5110)"
git revert c421809918b7106b40a81134f9fb5103146fc715 # "update bcmdhd driver from GT-9505 Source"
git revert 44655588a0b361afa15761b5c58f5a558c1c181c # "WIFI: Use kernel version 3.4 ifdef's."
git revert 3cedbff33e9884fdf3f7aaaa83ab9774d8145d1f # "wireless backport from 3.4"
# Another build fix:
Date: Sun Nov 24 12:04:33 2013 +0100
lib: fix compile of lib/genalloc.c
Taken from commit 3cedbff ("wireless backport from 3.4").
lib/genalloc.c | 54 ++++++++++++++++++++++++++++++++----------------------
1 file changed, 32 insertions(+), 22 deletions(-)
After that I was able to build rt2x00 from 3.4.70 (after enabling MAC80211 in config).. Note: these patches do not seem to revert cleanly on cm-11.0
For cm-11.0 (HEAD was 22cbf2cfb211cef2e493c5984d237d0509bf98ce, "otg: when removing ED from readyQ also set flag"), I now do:
Code:
# v--- 2014-11-06 (CM 11.0)
- revert c421809 # update bcmdhd driver from GT-9505 Source
Conflict in drivers/net/wireless/bcmdhd/Makefile, remove -DPASS_IPV4_SUSPEND
and DEBUGFS_CFG80211 (unused), all that remains is:
DHDCFLAGS += -DBLOCK_IPV6_PACKET
Conflict in drivers/net/wireless/bcmdhd/dhd_sec_feature.h, remove:
CONFIG_MACH_KONA
.config:
BCMDHD=M (was =Y, but this allows debugging)
DHD_USE_STATIC_BUF=N
DHD_USE_SCHED_SCAN=N
- revert 4465558 # WIFI: Use kernel version 3.4 ifdef's.
- revert 3cedbff # wireless backport from 3.4
- git checkout 3cedbff -- include/linux/{export,module}.h lib/genalloc.c
git commit -m 'Build fixes from 3cedbff'
Compile fixes, also used by d90b43b "mali: add r3p1 for devices that need it"
This compiles (with CONFIG_MAC80211=M), I have yet to try the newer rt2x00 for my purposes.
Hi, I am building klte version of CrdroidAndroid ( a LineageOS based ROM) on a ubuntu 16.04 LTS VM.
I am getting the following error. I am not sure what to do here. I have been cleaning the build folder and ccache and trying to build. I keep ending at this error. Any help to solve this issue is greatly appreciated.
----------------------------------
/usr/bin/x86_64-linux-gnu-ld: /home/sadanand/crdroid/android/system/out/host/linux-x86/obj/SHARED_LIBRARIES/libart_intermediates/base/allocator.o: relocation R_X86_64_PC32 against protected symbol `_ZN3art18g_malloc_allocatorE' can not be used when making a shared object
/usr/bin/x86_64-linux-gnu-ld: final link failed: Bad value
clang++: error: linker command failed with exit code 1 (use -v to see invocation)
------------------------------------------
Thanks