Jam*_*ell 6 linux networking linux-kernel iproute network-interface
在/sf/ask/1745252071/中,有人询问网络接口名称可以有多长(显然是 16 个字节)。然而,该问题的答案似乎没有链接到有关该名称的其他限制的任何信息,例如:
\nip link我能够将;rm和-f作为有效名称,但它似乎无法解析带有空格的名称(尽管这可能只是其参数解析器的产物,实际上并不是一种保护)针对有问题的价值观))。\xce\xb1显示__,并且不能通过名称删除\xce\xb1)是否有关于接口可以被调用的内容以及在哪一层强制执行的文档(例如在内核、iproute2、libc 中)?
\n上下文:编写一个接受将存储在数据库中的接口名称的 CLI 命令,我想确定可以对坏名称进行多少过滤,而不会导致奇怪命名(尽管可能不是敌意)接口的问题。
\n小智 7
接口名称不应类似于ethNUM,wlanNUM或usbNUM。
这些名称由内核使用,如果您尝试将接口重命名为类似的名称,您将会遇到麻烦。根据我自己的经验,我知道这一点(试图保持两个接口稳定地命名为eth0和eth1,无论内核初始化它们的顺序如何)。
看到这个。
对于青蛙字符,内核的接口 ( ioctl(SIOCSIFNAME)... dev_change_name()... dev_valid_name()) 将拒绝任何为空字符串、.或..、包含任何/、:或空格 ( [\t\n\v\f\r \xa0]) 或长度超过15(不是 16)字节的接口名称:
bool dev_valid_name(const char *name)
{
if (*name == '\0')
return false;
if (strnlen(name, IFNAMSIZ) == IFNAMSIZ)
return false;
if (!strcmp(name, ".") || !strcmp(name, ".."))
return false;
while (*name) {
if (*name == '/' || *name == ':' || isspace(*name))
return false;
name++;
}
return true;
}
Run Code Online (Sandbox Code Playgroud)
其他控制字符,如\x1b(ESC)、不可见/双向标记或任何类型的二进制垃圾都可以正常工作。例如,您可以尝试:ip link add dev $'\e[1;41;33m' type bridge;-)
| 归档时间: |
|
| 查看次数: |
786 次 |
| 最近记录: |