如何将tap接口连接到互联网?
How to connect a tap interface to the internet?
作为个人项目,我想使用 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
.
上的数据包
你能做什么:
您可以通过网络链接或原始套接字来完成此操作。本质上,它是一种特殊的套接字类型,您可以在其上发送和接收原始以太网数据包。
您可以使用 brctl
命令将 tap0
和 wlan0
桥接到 br0
桥中。 Wifi 和以太网接口不能桥接在一起(它们在以太网级别上是不同的,802.11 数据包在 802.3 上没有意义,反之亦然)。
您可能无法在一百 kB 的 C 代码以下创建运行良好的 tcp 实现。这是因为tcp只是在用户层简单。
作为个人项目,我想使用 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
.
你能做什么:
您可以通过网络链接或原始套接字来完成此操作。本质上,它是一种特殊的套接字类型,您可以在其上发送和接收原始以太网数据包。
您可以使用
brctl
命令将tap0
和wlan0
桥接到br0
桥中。 Wifi 和以太网接口不能桥接在一起(它们在以太网级别上是不同的,802.11 数据包在 802.3 上没有意义,反之亦然)。
您可能无法在一百 kB 的 C 代码以下创建运行良好的 tcp 实现。这是因为tcp只是在用户层简单。