用于测试IPv4和IPv6 DHCP服务的工具

dhcpdoctor的Python项目详细描述


dhcpdoctor

用于测试IPv4和IPv6 DHCP服务的工具

Logo

说明

dhcpdoctor发送dhcp请求,并检查它是否从dhcp服务器获得报价。 它支持ipv4的bootp+dhcp(-4)和ipv6的dhcpv6(-6)。

它可以通过在本地网络上通过 广播/多播或作为dhcp客户端,通过单播在一个工具中进行中继 对指定IP地址的请求(-s)。当转发请求时,您可以 指定要从中发送的中继地址(-f)。默认情况下 使用从发送的接口请求。从指定自定义中继时 地址,请记住,dhcp服务器将把响应发送回 你在这里指定的地址,所以它必须是你所在机器上的地址 正在从运行测试。

可以指定自定义客户端mac或duid(-c)。默认情况下,mac地址 使用要从其发送请求的接口的。

您可以指定用-i发送请求的接口。

程序输出和退出代码是NAGIOS/ICIGA^ {A1}。dhcp服务器的响应时间被测量并作为性能数据返回。

要求

dhcpdoctor需要python 3.4或更高版本才能运行。

由于它在引擎盖下使用scapy来创建、分解、发送和接收数据包,因此需要根权限才能运行。

安装

通过PIP:

pip install dhcpdoctor

icinga2 check命令

您可以使用dhcpdoctor作为来自icinga2或nagios的检查命令。

存在具有checkcommand定义的dhcpdoctor.conf配置 对于ICinga2你可以使用。使用此check命令的服务可能如下所示 这个:

apply Service "dhcpd6" {
    import "generic-service"
    check_command = "dhcpdoctor"
    vars.dhcpdoctor_ipv6 = true
    vars.dhcpdoctor_client_id = "00:11:11:11:11:11"
    assign where host.dhcpd6
}

如果要从提供的SPEC文件构建RPM,则 checkcommand配置将安装到 /etc/icinga2/conf.d/check_commands/dhcpdoctor.conf

开发

我们使用poetry来管理python依赖项和虚拟环境。

设置开发虚拟环境:

poetry install

运行工具:

poetry run dhcpdoctor -h

Vagrant可用于快速启动vm 要测试的DHCP服务器:

vagrant up
vagrant ssh dhcpdoctor
cd /vagrant
poetry run dhcpdoctor -h
exit
vagrant destroy

有关详细信息,请参见Vagrantfile中的注释。

释放量

poetry run bumpversion patch

您可以提供minormajor,而不是修补程序。 这将创建提交和标记。一定要用git push --tags推动它。

dev-version.sh脚本会将开发或发布的版本作为 需要(基于我们是否在git标记上)并在ci作业中调用。

建筑

下面是如何使用pyinstaller将dhcpdoctor构建到单个二进制文件中 然后将其打包为基于红帽的系统的RPM。结果 二进制文件是setuid根文件,因为dhcpdoctor需要在特权udp上工作 端口,但通常在从nagios或icinga调用时作为特殊用户运行。

pip3 install --upgrade bumpversion poetry pyinstaller
poetry install --no-dev
poetry run pip freeze | grep -v egg=dhcpdoctor > requirements.txt
pip3 install -r requirements.txt
./dev-version.sh
./build.sh

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
从方法名创建java查询无效。正在尝试筛选可分页的   构造函数中的java异常消息   java为什么我在MAC OS X 10.11上看不到java_主路径?   java如何澄清用户的输入是否是二进制数?   java在ant脚本中将JVM参数传递给clover   从txt文件读取调查结果并输出每个调查答案频率的Java程序   java进程引擎。getDefaultProcessEngine()空点异常   java SpringSecurity:忽略服务器名的别名并强制重新登录   java pythonsocket[Errno 57]socket未连接,尽管响应良好   使用Commons或Guava将文本文件转换为Java列表<String>   在hadoop中使用相同的输入文件为两个不同的任务创建两个输出文件   java方法toArray()不处理列表   我的应用程序中的java试图在Web服务器中更新数据库时获取通知。如何做到这一点?   java无法选择ListView项   java如何将变量传递给扩展类的方法   java使用片段中的数据绑定和相关活动的不同包   java出现读入文件问题,并将其设置为变量   JavaJSF2。0@EJB注入@ViewScoped导致MyFaces成为CFNE   java如何创建spring0boot项目?