Android DHCP端口重定向 -- networking 领域 和 iptables 领域 和 dhcp 领域 android 相关 的问题

Android DHCP Port Redirection


简体版||繁體版
2
vote

问题

中文

我正在研究Google Pixel(Android 8.1.0)的MirrorLink实现。我必须实施DHCP服务器;但是,Android应用程序无法侦听保留端口。

Android应用程序正在侦听UDP端口6700上的DHCP发现广播。我的意图是将DHCP流量转发到6700,因此我的应用程序可以处理DHCP请求。

我找不到导致我的应用程序的DHCP流量的IPTables规则的组合。如果我直接向端口6700发送DHCP发现,我会收到流量。

  # iptables -S  -P INPUT ACCEPT -P FORWARD ACCEPT -P OUTPUT ACCEPT -N bw_FORWARD -N bw_INPUT -N bw_OUTPUT -N bw_costly_rmnet_data0 -N bw_costly_shared -N bw_costly_tun0 -N bw_data_saver -N bw_happy_box -N bw_penalty_box -N fw_FORWARD -N fw_INPUT -N fw_OUTPUT -N fw_dozable -N fw_powersave -N fw_standby -N natctrl_FORWARD -N natctrl_tether_counters -N nm_mdmprxy_doze_mode_skip -N nm_mdmprxy_iface_pkt_fwder -N oem_fwd -N oem_out -N st_OUTPUT -N st_clear_caught -N st_clear_detect -N st_penalty_log -N st_penalty_reject  # iptables -t nat -S  -P PREROUTING ACCEPT -P INPUT ACCEPT -P OUTPUT ACCEPT -P POSTROUTING ACCEPT -N natctrl_nat_POSTROUTING -N oem_nat_pre   

我已经尝试了以下规则的各种组合:

  iptables -A INPUT -i ncm0 -p udp --dport 67 -J REDIRECT --to-port 6700 iptables -A FORWARD -i ncm0 -p udp --dport 6700 -j ACCEPT iptables -A INPUT -i ncm0 -p udp --dport 6700 -j ACCEPT iptables -A PREROUTING -t nat -i ncm0 -p udp --dport 67 -j REDIRECT --to-port 6700   

我怀疑对iptables配置(可能)的悲惨误解,对DHCP流量的特殊注意事项,或Android /设备特定冲突。

我会感谢任何帮助让这个工作。这是实现MirrorLink实现的最后一个障碍。

如果这已经没有清除,我就可以root访问设备。

对于绝对清晰度 - MirrorLink设备通过USB以太网连接(CDC-NCM)向Android设备发送DHCP发现请求(UDP端口67)。 Google Pixel和大多数AOSP设备可能将此接口暴露为 ncm0 。 Android应用程序无法侦听IANA知名保留端口,因此需要内部端口重定向到1024-49151范围。 Android设备是用于操作DHCP服务器并将DHCP优惠返回给MirrorLink设备的可信。

english

I am working on a MirrorLink implementation for the Google Pixel (Android 8.1.0). I must implement a DHCP server; however, Android applications cannot listen on reserved ports.

The Android application is listening for DHCP DISCOVERY broadcasts on UDP port 6700. My intent is to port forward the DHCP traffic to 6700 so my application can handle the DHCP request.

I cannot find a combination of iptables rules that result in DHCP traffic reaching my application. If I send a DHCP DISCOVERY directly to port 6700 I receive the traffic.

# iptables -S  -P INPUT ACCEPT -P FORWARD ACCEPT -P OUTPUT ACCEPT -N bw_FORWARD -N bw_INPUT -N bw_OUTPUT -N bw_costly_rmnet_data0 -N bw_costly_shared -N bw_costly_tun0 -N bw_data_saver -N bw_happy_box -N bw_penalty_box -N fw_FORWARD -N fw_INPUT -N fw_OUTPUT -N fw_dozable -N fw_powersave -N fw_standby -N natctrl_FORWARD -N natctrl_tether_counters -N nm_mdmprxy_doze_mode_skip -N nm_mdmprxy_iface_pkt_fwder -N oem_fwd -N oem_out -N st_OUTPUT -N st_clear_caught -N st_clear_detect -N st_penalty_log -N st_penalty_reject  # iptables -t nat -S  -P PREROUTING ACCEPT -P INPUT ACCEPT -P OUTPUT ACCEPT -P POSTROUTING ACCEPT -N natctrl_nat_POSTROUTING -N oem_nat_pre 

I have tried various combinations of the following rules:

iptables -A INPUT -i ncm0 -p udp --dport 67 -J REDIRECT --to-port 6700 iptables -A FORWARD -i ncm0 -p udp --dport 6700 -j ACCEPT iptables -A INPUT -i ncm0 -p udp --dport 6700 -j ACCEPT iptables -A PREROUTING -t nat -i ncm0 -p udp --dport 67 -j REDIRECT --to-port 6700 

I suspect either a dire misunderstanding of iptables configuration (likely), special considerations for DHCP traffic, or Android/device specific conflicts.

I would appreciate any help getting this to work. It's the last barrier to achieving the MirrorLink implementation.

I have root access to the device if that wasn't clear already.

For absolute clarity - the MirrorLink device sends a DHCP DISCOVERY request (UDP port 67) to the Android device over a USB ethernet connection (CDC-NCM). The Google Pixel and probably most AOSP devices expose this interface as ncm0. Android applications can't listen on IANA well-known reserved ports, hence the need for internal port redirection to the 1024 - 49151 range. The Android device is reponsible for operating a DHCP server and returning a DHCP offer to the MirrorLink device.

        

回答列表

0
 
vote
vote
最佳答案
 

我使用DNAT重定向而不是端口重定向解决了这个问题,因为涉及广播流量的重定向的一些限制。

  iptables -I INPUT -p udp --dport 67 -j ACCEPT iptables -I INPUT -p udp --dport 6700 -j ACCEPT iptables -I PREROUTING -t nat -i ncm0 -p udp -src 0.0.0.0 --dport 67 -j DNAT --to 0.0.0.0:6700   
 

I solved this problem using DNAT redirection instead of port redirection, due to some limitations of REDIRECT involving broadcast traffic.

iptables -I INPUT -p udp --dport 67 -j ACCEPT iptables -I INPUT -p udp --dport 6700 -j ACCEPT iptables -I PREROUTING -t nat -i ncm0 -p udp -src 0.0.0.0 --dport 67 -j DNAT --to 0.0.0.0:6700 
 
 

相关问题

3  更改DNS但留在DHCP上  ( Change dns but stay on dhcp ) 
我有一个"MINIX Neo X8-H Plus" Android电视盒,运行Android 4.4(Kitkat)。 我想在WiFi连接上更改DNS服务器,但要执行此操作,如果我更改为静态IP地址,我只能获得该选择。现在,在Windows或iOS上,您可以继续使用DHCP,同时将不同的DNS服务器设置为DHCP服务...

3  有没有办法每网络设置IP配置?  ( Is there a way to set the ip configuration on a per network basis ) 
我连接到多个wifi网络。在一些网络上,我必须使用静态IP地址。大多数DHCP配置都没有选择使用静态IP寻址。 因为这个原因,我希望能够使用特殊设置为网络设置特定的IP设置。是这样的事情吗? ...

15  通过主机名识别Android设备  ( Identifying an android device by its hostname ) 
我们网络中的每个Android设备都有主机名 android_[some-hex-number].domain.local 。我确实有一个要求10个IP地址(不同的Mac,但总是同一个主机名)的设备。有没有办法从该主机名中获取IMEI或序列号? 我找到了有关hostname的不同信息: http://comm...

10  如何更改DHCP配置?  ( How to change dhcp config ) 
我正在尝试从我的Android设备中的IMS客户端访问IMS核心,但是我需要修改DHCP客户端,以将核心的IP添加为DNS之一。在Linux操作系统的情况下,以下将作业:: cd /etc/dhcp3/ ; vi dhclient.conf ; /* add the line:: prepend domain-...

3  三星Galaxy S - 获取IP地址的问题。 “请求”  ( Samsung galaxy s problem obtaining ip address nak in request ) 
我无法从我的wifi路由器获取我的Android智能手机的IP地址。 观察: 与其他路由器或通过蜂窝数据的智能手机连接正常。 我的路由器与我的电脑的wifi连接是好的。 智能手机的WiFi链接到最近。 安全打开或关闭不会改变。 路由器是tpink wr541 v7。固件升级没有帮助。 问题持续存...

0  Android USB共享连接是否运行DHCP服务器?  ( Does android usb shared connection runs a dhcp server ) 
我知道Android的USB共享连接,我一直在使用它来连接到我的电脑。 还有一个旧的国内路由器,具有RJ45和无线接口。我一直在考虑使用USB-RJ45转换器将手机直接连接到路由器,以便根据路由器的RJ45交换接口向计算机提供互联网,以及使用WiFi的其他无线设备。 所以我的问题是:是Android USB共享连接运...

61  如何更改我的Android设备的名称?  ( How do i change the name of my android device ) 
我的Android设备是Nexus One。但这应该适用于所有当前的Android设备。 如何更改我的Android设备的名称? 当我连接到我的无线路由器的客户端表时,我的Android设备被列为:Android_1234567890abedfc。我想给它一个更可读的名字。 ...

7  Droidwall和无线系绳  ( Droidwall and wireless tethering ) 
我有一个非常简单的问题:当我运行 Wifi Tether 时,除非我禁用 DroidWall 防火墙,否则计算机将无法获取IP地址。 dw以白名单模式运行,但我在其菜单上运行,以启用它找到的所有无线相关的应用程序。没有。我必须阻止它来制作DHCP服务器工作。 Android 4.1中的应用程序,或者至少在库存GS...

2  在4.0 ICS中访问Internet的问题  ( Problem accessing internet in 4 0 ics ) 
对于一些奇怪的原因,我的Android 4.0 ICS平板电脑不再能够访问Internet。 首先,通过WiFi,它可以连接到两个不同的网络。 然后,我试图通过DHCP将其连接到家庭路由器。它不能。 至于Wifi,平板电脑获得IP号。 我不知道这是怎么发生的,如果它是 route 问题或dns问题或其他。 试图安装终...

0  未通过Cyanogenmod连接到公共WiFi网络  ( Fail to connect to public wifi networks with cyanogenmod ) 
我将预先安装的操作系统更改为Cyanogenmod 9在我的xperia neo v上,从那时起,我无法连接到任何需要简单注册的免费公共网络(如机场,咖啡馆等)。 我的手机确实连接到网络(它说连接)但是当我打开浏览器(Opera)注册它永远不会连接时,播放失败后一段时间后无法连接消息。 这与这个其他问题我也有?要解...




© 2022 it.wenda123.org All Rights Reserved. 问答之家 版权所有