Linux DHCP服务器选项43供应商封装选项,如何格式化/编码?

我管理一个小型企业的网络,该企业有一个IPCop防火墙盒,为网络(以及其他各种服务)提供DHCP服务. IPCop中的DHCP服务器似乎是dhcpd,IPCop提供了一个基于Web的前端来编辑配置文件.

我希望使用vendor-encapsulated-options选项将DHCP选项66和67的特定值发送到特定的供应商类标识符.目的是自动配置一些支持DHCP选项66/67和43/60的VoIP电话.

我已经设法获得选项66 tftp-server-name和67 bootfile-name工作以自动配置手机.但当然这些选项是全局的并发送给所有DHCP客户端.我正在尝试使用vendor-class-indentifier和vendor-encapsulated-options DHCP选项来仅将自动配置信息发送到手机.我意识到这对于小型企业网络来说可能有些过分,但这都是为了拓宽我的知识面.

所以我开始阅读那里的一些信息,我无法弄清楚如何在vendor-encapsulated-options字符串中编码选项66/67.
这是相关的RFC … http://tools.ietf.org/html/rfc2132#section-8第8.4节
这里是“供应商封装选项”下dhcpd http://www.daemon-systems.org/man/dhcp-options.5.html的手册页

这些文档似乎暗示选项将以HEX格式编码,但是查看vendor-encapsulated-options选项的手册页示例…

The value of this option can be set in one of two ways.  
The first way is to simply specify the data directly,using a text string or a colon-separated list of hexadecimal values.  
For example:  
       option vendor-encapsulated-options
           2:4:AC:11:41:1:
           3:12:73:75:6e:64:68:63:70:2d:73:65:72:76:65:72:31:37:2d:31:
           4:12:2f:65:78:70:6f:72:74:2f:72:6f:6f:74:2f:69:38:36:70:63;

当我尝试将该批次从HEX解码为ASCII时,我得到以下内容:
????甲????????? sundhcp-server17-1 ???????? /出口/根/了i86pc
所以我确定我不能正确理解格式/编码.

这是来自IPCop的dhcpd.conf的我的片段

subnet 192.168.1.0 netmask 255.255.255.0 #GREEN
{
        range 192.168.1.30 192.168.1.200;
        option subnet-mask 255.255.255.0;
        option domain-name "domain.com";
        option routers 192.168.1.1;
        option domain-name-servers 192.168.1.1;
        option ntp-servers 192.168.1.1;
        option netbios-name-servers 192.168.1.3;
        default-lease-time 43200;
        max-lease-time 172800;
        option vendor-encapsulated-options "hello";
        option vendor-class-identifier "snom320";
        option vendor-class-identifier "snom821";
        option bootfile-name "voipsettings/firstboot.xml";
        option tftp-server-name "http://username:password@intranet.domain.com";
} #GREEN

我根据DHCP请求中的VoIP电话(Snom)提交的值设置了供应商类标识符. bootfile-name和tftp-server-name是我希望在vendor-encapsulated-options中编码的选项(66/67).
Snom在这里有他们维基的指南……
http://wiki.snom.com/Networking/DHCP/Options#Auto_Provisioning_Options
(道歉,我的声誉太低,无法在一个问题中发布> 2个链接)
那个wiki似乎暗示我需要将vendor-class-identifier编码为“n个字节的字符串”
此外,该维基文章中给出的供应商封装选项的示例在从HEX转换为ASCII时也会返回乱码.所以有一些关键的东西,我在这里不理解.

任何人都可以告诉我如何正确格式化/编码这些DHCP选项?

解决方法

DHCP选项43有点奇怪的野兽.供应商可以随心所欲地对待它 – 有些人希望选项号与DHCP选项号匹配,有些则不然.

基本结构是1个字节用于选项ID,1个字节用于选项数据的长度(n),然后是n个字节的实际选项数据 – 并且,冲洗和重复.

我们来自dhcp-options的例子.他们将新行列入战略性地点,以便于阅读.实际上,他们配置的设置就是这样:

02:04:AC:11:41:01:03:12:73:75:6e:64:68:63:70:2d:73:65:72:76:65:72:31:37:2d:31:04:12:2f:65:78:70:6f:72:74:2f:72:6f:6f:74:2f:69:38:36:70:63;

除非你知道你在寻找什么,否则很难阅读.让我们分解部分:

>字节1,002.这表示此块是配置选项编号2.如何解释这取决于供应商.
>字节2,0×04.这表示选项2的数据将占用接下来的4个字节.
>字节3-6,0xAC114101.这四个字节是实际数据.正如您在尝试解码时看到的那样,它不是可读数据.
>字节7,下一个选项块的开始,0x03.整个链重新开始,这表示以下配置是选项3.
>依此类推,分为3个部分

另一个例子,来自snom wiki页面:

42:0c:68:74:74:70:3a:2f:2f:74:65:73:74:00:43:12:73:6e:6f:6d:2f:73:65:74:74:69:6e:67:73:2e:70:68:70:00;

>字节1,042.对于选项代码66,42 in hex为66.
>字节2,0x0c.长度为12个字节.
>字节3-14,0x687474703a2f2f7465737400.这是http://在末尾用空字节(0x00)测试.不知道他们为什么那样.
>字节15,0×43.选项67.
>字节16,0×12. 18字节长度.
>字节17-34,0x736e6f6d2f73657474696e67732e70687000. SNOM / settings.php中.同样,结尾处的空字节.

所以,假设您需要构建一个选项43,其中http://phone.example.com作为选项66,phonesettings.txt作为选项67.

>字节1,选项代码66,0×42
>字节2,http://phone.example.com上的24字节长度,所以0x18
>字节3-26,数据. 0x687474703a2f2f70686f6e652e6578616d706c652e636f6d
>字节27,选项代码67,0×43
>字节28,在phonesettings.txt上长度为17个字节,所以为0x11
>字节29-45,数据. 0x70686f6e6573657474696e67732e747874

所以,一个完整的配置字符串:

42:18:68:74:74:70:3a:2f:2f:70:68:6f:6e:65:2e:65:78:61:6d:70:6c:65:2e:63:6f:6d:43:11:70:68:6f:6e:65:73:65:74:74:69:6e:67:73:2e:74:78:74;

如果这不起作用,请尝试将空字节添加到数据字符串的末尾(并相应地增加长度字段),如同在他们的示例中一样 – 它们可能要求每个选项末尾的空字节或偶数个字节对于每个选项的长度.这是选项43的缺点 – 他们可以做任何他们想做的事!

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


linux常用进程通信方式包括管道(pipe)、有名管道(FIFO)、信号(signal)、消息队列、共享内存、信号量、套接字(socket)。管道用于具有亲缘关系的进程间通信,有名管道的每个管道具有名字,使没有亲缘关系的进程间也可以通信。信号是比较复杂的通信方式,用于通知接受进程有某种事件发生,除
Linux性能观测工具按类别可分为系统级别和进程级别,系统级别对整个系统的性能做统计,而进程级别则具体到进程,为每个进程维护统计信息。

按实现原理分,可分为基于计数器和跟踪以及剖析。含义如下:

计数器:内核维护的统计数据,通常为无符号整型,用于对发生的事件计数,比如,网络包接收计数器,磁
本文详细介绍了curl命令基础和高级用法,包括跳过https的证书验证,详细追踪整个交互过程,可用于调用网络后端接口,诊断http和https网络服务故障。
本文包含作者工作中常用到的一些命令,用于诊断网络、磁盘占满、fd泄漏等问题。命令包括ping、fping、tcpdump、lsof、netstat、/proc/$pid/fd、du、grep、traceroute、dig。
linux的平均负载表示运行态和就绪态及不可中断状态(正在io)的进程数目,用uptime查看到负载很高,既有可能是CPU利用率高,也可能是大量在等待io的进程导致,用mpstat查看每个CPU的使用情况,查看CPU的使用率或者CPU花在等待io的时间,接着用pidstat定位具体的进程
CPU上下文频繁切换会导致系统性能下降,切换分为进程切换、线程切换及中断切换,进程切换的开销较大,除了需要保存寄存器和程序计数器中的值还需保存全局变量、栈等到内存中,以便下次运行恢复,而同一进程中的线程切换开销会小很多,只需更新寄存器和线程独有的栈,共享资源如打开的文件、全局变量等无需切换,当硬件中
1.top命令 作用:该命令可以按CPU使用.内存使用和执行时间对任务进行排序,常用来监控系统中占用CPU或内存较高的程序及CPU和内存的负载。 默认视图: 当想看系统负载时,可观察汇总的%CPU中的us用户进程和sy系统进程是否占用CPU很高,相加接近100%就说明占用很高了,有些程序可能得不到及
文章浏览阅读1.8k次,点赞63次,收藏54次。Linux下的目录权限!!!粘滞位!!!超详解!!!
文章浏览阅读1.6k次,点赞44次,收藏38次。关于Qt的安装、Windows、Linux、MacBook_mack book 安装qt
本文介绍了使用shell脚本编写一个 Hello
文章浏览阅读1.5k次,点赞37次,收藏43次。【Linux】初识Linux——了解操作系统的发展历史以及初次体验Linux编程环境
文章浏览阅读3k次,点赞34次,收藏156次。Linux超详细笔记,个人学习时很认真的记录的,觉得好的麻烦点个赞。
文章浏览阅读6.8k次,点赞109次,收藏114次。【Linux】 OpenSSH_9.3p1 升级到 OpenSSH_9.5p1(亲测无问题,建议收藏)_openssh_9.5p1
文章浏览阅读3.5k次,点赞93次,收藏78次。初识Linux中的线程,理解线程的各种概念,理解进程地址空间中的页表转换,介绍pthread线程库并理解线程库!
文章浏览阅读863次。出现此问题为Linux文件权限问题,解决方案为回到引擎目录执行命令。输入用户密码后运行./UnrealEditor。_increasing per-process limit of core file size to infinity.
文章浏览阅读2.9k次。使用文本编辑器:打开CSV文件,并使用文本编辑器(如Notepad++、Sublime Text、Visual Studio Code等)来查看文件的字符编码格式。通常在编辑器的底部状态栏或设置中可以找到当前编码的显示。请注意,上述方法并非绝对准确,特别是当文件没有明确的编码标识时。因此,如果你发现CSV文件在不同的工具或方法中显示不同的编码格式,可能需要进行进一步的分析和判断,或者尝试使用不同的编码转换方法。该命令将输出文件的MIME类型和编码信息。使用命令行工具:在命令行中,你可以使用。_shell读取csv文件逐行处理
本文介绍了如何在Linux系统中升级gcc版本,以便更好地支持C++11及以上版本的新特性。通过升级gcc,可以提升编译器的功能和性能,获得更好的开发体验。详细的步骤和方法请参考原文链接。
文章浏览阅读4.4k次,点赞6次,收藏19次。Mosquitto是一个开源的MQTT消息代理服务器。MQTT是一个轻量级的、基于发布/订阅模式的消息传输协议。 mosquitto的安装使用比较简单,可以方便的来进行一些测试。_linux mosquitto
文章浏览阅读7.2k次,点赞2次,收藏12次。Linux中,用于根目录下有一个.ssh目录,保存了ssh相关的key和一些记录文件。_~/.ssh/
文章浏览阅读4.5k次,点赞5次,收藏18次。首先需要安装 snmp ,使用下面的命令进行安装安装完毕之后,使用下面的命令查看是否安装成功当命令行显示如图即为安装成功。_snmp工具