linux - 如何将水龙头接口连接到互联网?
问题描述
作为一个个人项目,我想使用 C/C++ 和 Tap 接口构建一个 TCP/IP 堆栈。我有一个连接到互联网的 wlan0 接口(无线)。现在我想通过这个 wlan0 接口从互联网发送和接收数据包。
我怎样才能做到这一点?
这些是我用来创建我的点击界面的命令:
sudo ip tuntap add name tap1 mode tap
sudo ip link set tap1 up
sudo ip link set tap1 promisc on
sudo ip addr add 10.0.0.2/24 dev tap1
sudo ip route add dev tap1 10.0.0.0/24
这是的输出ip a
3: wlan0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
link/ether dc:f5:05:2c:12:a1 brd ff:ff:ff:ff:ff:ff
inet 192.168.1.14/24 brd 192.168.1.255 scope global dynamic noprefixroute wlan0
valid_lft 84147sec preferred_lft 84147sec
inet6 fe80::1e59:c571:bc2f:66b9/64 scope link noprefixroute
valid_lft forever preferred_lft forever
6: tap1: <BROADCAST,MULTICAST,PROMISC,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether da:e8:0d:67:e7:fd brd ff:ff:ff:ff:ff:ff
inet 10.0.0.2/24 scope global tap1
valid_lft forever preferred_lft forever
inet6 fe80::d8e8:dff:fe67:e7fd/64 scope link
valid_lft forever preferred_lft forever
如果你想测试它,这是代码(我还在写它) https://github.com/Bechir-Brahem/tuntap-device
解决方案
Tap 设备只是一个虚拟以太网接口 - 您在其上发送的内容,您可以在设备文件/dev/tap
(tap0
你可以做什么:
您可以通过 netlink 或原始套接字来执行此操作。本质上,它是一种特殊的套接字类型,您可以在其上发送和接收原始以太网数据包。
您可以使用命令桥接
tap0
并wlan0
进入br0
桥接brctl
。Wifi 和以太网接口不能桥接在一起(它们在以太网级别上是不同的,802.11 数据包在 802.3 上没有意义,反之亦然)。
可能您无法在 100 kB 的 C 代码以下创建一个运行良好的 tcp 实现。这是因为 tcp 仅在用户级别上很简单。
推荐阅读
- django - 将 Admin ManyToManyField 提取到 CSV 文件
- c# - 以编程方式创建的用户控件的 C# Winform Click 事件
- asp.net-mvc - 如何在 mvc 中自动增加 ID
- bash - 每十分钟计算方括号中的 ID 的 Bash 脚本
- unreal-engine4 - 设计没有控制器的虚幻引擎 VR 购物应用
- django - Django过滤器至少获得n条记录
- postgresql - 如何识别 postgres 表字段中的无效日期?
- mysql - 如果连接表不包含行,则 mySQL 中的连接表返回 NULL
- reactjs - 如何根据 React-Router 中的 Route 更改更改状态?
- c# - 在 C# 中使用 SSH.NET SFTP 下载目录