Android 实现以太网口共享3G网卡连接外网

以太网卡位eth0 3G网卡为ppp0

1.设置以太网口为静态IP:

IP:192.168.1.1     255.255.255.0

GW:192.168.1.1 DNS:202.101.172.35

2.测试笔记本IP设置:

IP:192.168.1.2   255.255.255.0

GW:192.168.1.1 DNS:202.101.172.35


3.连接好以太网跟3G网络,通过笔记本PING 192.168.1.1来确认笔记本与ANDROID设备连通。

4.此时通过busybox route查看当前的路由状态

可以看到当前默认的路由是192.168.1.1 需要手动对这个路由进行修改。

运行下面的命令


# busybox route del default gw 192.168.1.1
busybox route del default gw 192.168.1.1

# busybox route add default gw 10.64.64.64
busybox route add default gw 10.64.64.64

查看网关:


# iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE
iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE


# iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE


# echo "1" > /proc/sys/net/ipv4/ip_forward
echo "1" > /proc/sys/net/ipv4/ip_forward

5.在测试笔记本上进行测试 PING WWW.BAIDU.COM 可以看到能够PING通。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Android 11 中,可以使用 ConnectivityManager.NetworkCallback API 来监听网络连接的变化,并进行相应的处理。以下是一个简单的示例代码,可以实现以太网同时内外网连接: ```kotlin class MainActivity : AppCompatActivity() { private lateinit var connectivityManager: ConnectivityManager override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) connectivityManager = getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager val builder = NetworkRequest.Builder() .addTransportType(NetworkCapabilities.TRANSPORT_ETHERNET) .addCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET) connectivityManager.registerNetworkCallback(builder.build(), object : ConnectivityManager.NetworkCallback() { override fun onAvailable(network: Network) { super.onAvailable(network) // 处理网络连接成功的逻辑 Toast.makeText(this@MainActivity, "Ethernet1 connected", Toast.LENGTH_SHORT).show() // 绑定网络到应用程序 val networkRequest = NetworkRequest.Builder() .addTransportType(NetworkCapabilities.TRANSPORT_ETHERNET) .addCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET) .build() connectivityManager.bindProcessToNetwork(network) } override fun onLost(network: Network) { super.onLost(network) // 处理网络连接断开的逻辑 Toast.makeText(this@MainActivity, "Ethernet1 disconnected", Toast.LENGTH_SHORT).show() // 解绑网络 connectivityManager.bindProcessToNetwork(null) } }) // 第二个以太网 val builder2 = NetworkRequest.Builder() .addTransportType(NetworkCapabilities.TRANSPORT_ETHERNET) .addCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET) connectivityManager.registerNetworkCallback(builder2.build(), object : ConnectivityManager.NetworkCallback() { override fun onAvailable(network: Network) { super.onAvailable(network) // 处理网络连接成功的逻辑 Toast.makeText(this@MainActivity, "Ethernet2 connected", Toast.LENGTH_SHORT).show() // 绑定网络到应用程序 val networkRequest = NetworkRequest.Builder() .addTransportType(NetworkCapabilities.TRANSPORT_ETHERNET) .addCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET) .build() connectivityManager.bindProcessToNetwork(network) } override fun onLost(network: Network) { super.onLost(network) // 处理网络连接断开的逻辑 Toast.makeText(this@MainActivity, "Ethernet2 disconnected", Toast.LENGTH_SHORT).show() // 解绑网络 connectivityManager.bindProcessToNetwork(null) } }) } override fun onDestroy() { super.onDestroy() connectivityManager.unregisterNetworkCallback(object : ConnectivityManager.NetworkCallback() {}) } } ``` 在这个示例代码中,我们首先使用 `ConnectivityManager.NetworkCallback` 监听了两个以太网连接状态。当有以太网连接成功时,我们会将该网络绑定到应用程序中,实现应用程序同时连接两个以太网的目的。在网络断开时,我们会解绑网络,并进行相应的处理。 需要注意的是,在 Android 11 中,应用程序需要在 Manifest 文件中声明 `android:foregroundServiceType="location"` 权限才能够使用 `bindProcessToNetwork` 方法。同时,应用程序还需要在运行时请求 `ACCESS_FINE_LOCATION` 权限,否则 `bindProcessToNetwork` 方法将会抛出 `SecurityException` 异常。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值