我有一个tap0在命令行上创建的现有点击设备()。
# ip tuntap add dev tap0 mode tap
我想使用C程序读取该接口上传入的所有数据。我检查了其他SO问题,但是找到了通过打开创建接口的代码/dev/net/tun。
任何人都可以提供有关如何打开和阅读现有界面的指导吗?我不确定应该打开哪个文件tap0?
打开现有的tun / tap界面与创建新界面类似。仅在使用ioctl(TUNSETIFF)时给接口命名:
const int fd = open("/dev/net/tun", O_RDWR);
if (fd != -1)
{
struct ifreq ifr;
memset(&ifr, 0, sizeof(ifr));
ifr.ifr_flags = IFF_TUN | IFF_NO_PI;
strncpy(ifr.ifr_name, "tun0", IFNAMSIZ); // <<<<=== THIS WAY
if (ioctl(fd, TUNSETIFF, &ifr) != -1)
{
如果没有该strncpy行,代码将创建一个带有一些空闲编号的新接口。通过该行,它尝试打开tun0。注意:如果tun0已被其他进程打开,则失败。
以上已通过IFF_TUN测试。我还没有尝试过IFF_TAP。
您可以使用文件描述符(fd)进行读写:
tun的示例:
char buffer[0x1000];
const int len = read(fd, buffer, sizeof(buffer));
if (len > 0)
{
static const char IPV6_VER_MASK = 0x60;
if ((buffer[0] & IPV6_VER_MASK) == IPV6_VER_MASK)
{
handle_ipv6_packet((const struct ip6_hdr*)buffer, len);
}
}
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。