2011-04-04 19 views
5

He compilado Linux para el emulador de Android con la funcionalidad completa de netfilter habilitada. Y obtuve un binario de iptables luego de compilar Android desde la fuente.error de iptables en android: iptables-save y iptables-restore no funciona

cuando empujo este binario en el emulador

puedo ejecutar comandos como más adelante con éxito.

iptables -L 
iptables -F 
iptables -A INPUT -s www.google.com -j DROP 

con este error:

# # iptables -L 
getsockopt for multiport failed strangely: No such file or directory 
getsockopt for multiport failed strangely: No such file or directory 
Chain INPUT (policy ACCEPT) 
target  prot opt source    destination   

Chain FORWARD (policy ACCEPT) 
target  prot opt source    destination   

Chain OUTPUT (policy ACCEPT) 
target  prot opt source    destination   
# 

y

# iptables -A INPUT -s www.google.com -j DROP 
getsockopt for multiport failed strangely: No such file or directory 
getsockopt for multiport failed strangely: No such file or directory 
FIX ME! implement getgrnam() bionic/libc/bionic/stubs.c:344 

pero al menos los comandos anteriores que trabajan!

pero cuando intento

iptables-save  or 
iptables-restore 

me sale el error '

iptables-save: not found 

En mi archivo de configuración

CONFIG_NETFILTER_XT_MATCH_MULTIPORT=m 

¿cuál es el problema .. ?? y cómo puedo habilitar la funcionalidad completa de iptables en android o cómo puedo guardar las reglas de iptables activas de forma segura y volver a cargarlas cuando vuelva a arrancar.

ayuda. ¡gracias!

+0

Estoy bastante seguro de 'iptables- save' y' iptables- restore' son diferentes binarios, de ahí que no contienen espacios (en contraposición a 'iptables -L', por ejemplo, lo que lo hace) . – eldarerathis

+0

en realidad, quise escribir iptables-save o iptables-retore como una oración. lo siento. – Preetam

Respuesta

1

Esto es lo que he añadido a mi Android.mk con el fin de obtener los dos iptables-save e iptables-retore. Compila bien en Android 4.0.3.

 


#---------------------------------------------------------------- 
# iptables-save 


include $(CLEAR_VARS) 

LOCAL_C_INCLUDES:= \ 
    $(LOCAL_PATH)/../include/ 

LOCAL_CFLAGS:=-DNO_SHARED_LIBS=1 
LOCAL_CFLAGS+=-DALL_INCLUSIVE 
LOCAL_CFLAGS+=-DXTABLES_INTERNAL 
# Accommodate arm-eabi-4.4.3 tools that don't set __ANDROID__ 
LOCAL_CFLAGS+=-D__ANDROID__ 

LOCAL_SRC_FILES:= \ 
    iptables-save.c iptables.c xshared.c 

LOCAL_MODULE_TAGS := optional 
LOCAL_MODULE:=iptables-save 

LOCAL_STATIC_LIBRARIES := \ 
    libext \ 
    libext4 \ 
    libip4tc \ 
    libxtables 

include $(BUILD_EXECUTABLE) 


#---------------------------------------------------------------- 
# iptables-restore 


include $(CLEAR_VARS) 

LOCAL_C_INCLUDES:= \ 
    $(LOCAL_PATH)/../include/ 

LOCAL_CFLAGS:=-DNO_SHARED_LIBS=1 
LOCAL_CFLAGS+=-DALL_INCLUSIVE 
LOCAL_CFLAGS+=-DXTABLES_INTERNAL 
# Accommodate arm-eabi-4.4.3 tools that don't set __ANDROID__ 
LOCAL_CFLAGS+=-D__ANDROID__ 

LOCAL_SRC_FILES:= \ 
    iptables-restore.c iptables.c xshared.c 

LOCAL_MODULE_TAGS := optional 
LOCAL_MODULE:=iptables-restore 

LOCAL_STATIC_LIBRARIES := \ 
    libext \ 
    libext4 \ 
    libip4tc \ 
    libxtables 

include $(BUILD_EXECUTABLE) 

2

Los binarios iptables-save y iptables-restore no se crean con los archivos make del sistema Android predeterminados.

Deberá agregar reglas al archivo Android.mk en $mydroid/external/iptables/ para compilarlas. Los archivos fuente, iptables-save.c y iptables-restore.c ya están en ese directorio.

No comprobado, pero para compilar iptables-save, agregue algo como esto hasta el final de Android.mk. Enjuague y repita para iptables-restore:

# 
# Build iptables-save 
# 

include $(CLEAR_VARS) 

LOCAL_C_INCLUDES:= \ 
    $(LOCAL_PATH)/include/ \ 
    $(KERNEL_HEADERS) 

LOCAL_CFLAGS:=-DNO_SHARED_LIBS 
LOCAL_CFLAGS+=-DIPTABLES_VERSION=\"1.3.7\" 

LOCAL_SRC_FILES:= \ 
    iptables-save.c 

LOCAL_MODULE_TAGS:=debug 
LOCAL_MODULE:=iptables-save 

LOCAL_STATIC_LIBRARIES := \ 
    libiptc \ 
    libext 

include $(BUILD_EXECUTABLE) 
+0

¡Muchas gracias, David! pero cuando hago esto, recibo muchos errores como: – Preetam

+0

lo siento, no pude ingresar el resultado en los comentarios, así que lo puse en respuesta. – Preetam

+0

si el equipo de Android ha modificado la fuente de iptables, para excluir iptables-save de lo que deben haber modificado algunos archivos fuente que llaman funciones en iptables-save (creo). Puede ser por eso, el error viene. – Preetam