gpt4 book ai didi

c++ - Qt4.8 如何通过 QUdpSocket 接收任何数据包又名嗅探 DHCP?

转载 作者:行者123 更新时间:2023-11-28 05:30:46 26 4
gpt4 key购买 nike

我正在尝试使用 Qt4.8 创建一个简单的 DHCP 客户端。

我有两个主机:

  1. IP 地址为 inet addr 的服务器:1.5.1.10 Bcast:1.5.1.255 Mask:255.255.255.0isc-dhcp-server 向客户端发送以下参数:

    IPs: 1.5.1.11-100 Bcast:1.5.255.255  Mask:255.255.0.0
  2. 具有在启动时派生的参数的客户端 - inet addr:1.5.1.14 Bcast:1.5.255.255 Mask:255.255.0.0

在客户端上,我试图向 DHCP 服务器询问(在我的程序中)新选项。服务器已发送选项,但我的程序无法从服务器接收任何数据,除了直接发送到客户端地址(1.5.1.14:68)的数据。

对于客户端,我编译了 Open DHCP Locate,它工作正常。当我在客户端运行 tcpdump -i eth0 udp port 68 -e -n -vvvv -X 时,它显示来自服务器的数据包。我认为 QUdpSocket 需要一些参数来接收这些数据包。这些参数是什么?

我试过像这样创建我的套接字:

udpSocket = new QUdpSocket(this);
//udpSocket->bind(QHostAddress(QString("1.5.1.14")), 68);
qDebug() << "bind" << udpSocket->bind(QHostAddress::Any, 68, QUdpSocket::ShareAddress);
//qDebug() << "bind" << udpSocket->bind(QHostAddress::Broadcast, 68);

//qDebug() << "joinMulticastGroup" << udpSocket->joinMulticastGroup(QHostAddress(QString("1.5.255.255")));
//udpSocket->setMulticastInterface(QNetworkInterface::interfaceFromName(QString("eth0")));


// int optval = 1;
// qDebug() << "SO_BROADCAST" << setsockopt(udpSocket->socketDescriptor(), SOL_SOCKET, SO_BROADCAST, &optval, sizeof(optval));
// const char dev[] = "eth0";
// qDebug() << "SO_BINDTODEVICE" << setsockopt(udpSocket->socketDescriptor(), SOL_SOCKET, SO_BINDTODEVICE, dev, sizeof(dev) );

各种组合,但没有收到。

从服务器端登录,cmds是:

#tcpdump -i eth1 udp port 67 or port 68 -e -n -X

#dhcpdump -i eth1

.

    10:30:15.775100 84:eb:18:e8:59:b2 > ff:ff:ff:ff:ff:ff, ethertype IPv4 (0x0800), length 285: (tos 0x0, ttl 64, id 0, offset 0, flags [DF], proto UDP (17), length 271)
1.5.1.14.68 > 255.255.255.255.67: [udp sum ok] BOOTP/DHCP, Request from 31:32:33:34:35:36, length 243, Flags [none] (0x0000)
Client-Ethernet-Address 31:32:33:34:35:36
Vendor-rfc1048 Extensions
Magic Cookie 0x63825363
DHCP-Message Option 53, length 1: Discover
0x0000: 4500 010f 0000 4000 4011 37cc 0105 010e E.....@.@.7.....
0x0010: ffff ffff 0044 0043 00fb 6dda 0101 0600 .....D.C..m.....
0x0020: 0000 0000 0000 0000 0000 0000 0000 0000 ................
0x0030: 0000 0000 0000 0000 3132 3334 3536 0000 ........123456..
0x0040: 0000 0000 0000 0000 0000 0000 0000 0000 ................
0x0050: 0000 0000 0000 0000 0000 0000 0000 0000 ................
0x0060: 0000 0000 0000 0000 0000 0000 0000 0000 ................
0x0070: 0000 0000 0000 0000 0000 0000 0000 0000 ................
0x0080: 0000 0000 0000 0000 0000 0000 0000 0000 ................
0x0090: 0000 0000 0000 0000 0000 0000 0000 0000 ................
0x00a0: 0000 0000 0000 0000 0000 0000 0000 0000 ................
0x00b0: 0000 0000 0000 0000 0000 0000 0000 0000 ................
0x00c0: 0000 0000 0000 0000 0000 0000 0000 0000 ................
0x00d0: 0000 0000 0000 0000 0000 0000 0000 0000 ................
0x00e0: 0000 0000 0000 0000 0000 0000 0000 0000 ................
0x00f0: 0000 0000 0000 0000 0000 0000 0000 0000 ................
0x0100: 0000 0000 0000 0000 6382 5363 3501 01 ........c.Sc5..
10:30:16.776570 10:fe:ed:05:f9:53 > 31:32:33:34:35:36, ethertype IPv4 (0x0800), length 342: (tos 0x10, ttl 128, id 0, offset 0, flags [none], proto UDP (17), length 328)
1.5.1.10.67 > 1.5.1.33.68: [udp sum ok] BOOTP/DHCP, Reply, length 300, Flags [none] (0x0000)
Your-IP 1.5.1.33
Server-IP 1.5.1.10
Client-Ethernet-Address 31:32:33:34:35:36
Vendor-rfc1048 Extensions
Magic Cookie 0x63825363
DHCP-Message Option 53, length 1: Offer
Server-ID Option 54, length 4: 1.5.1.10
Lease-Time Option 51, length 4: 864000
Subnet-Mask Option 1, length 4: 255.255.0.0
Default-Gateway Option 3, length 4: 1.5.1.10
BR Option 28, length 4: 1.5.255.255
NTP Option 42, length 4: 1.5.1.10
END Option 255, length 0
PAD Option 0, length 0, occurs 20
0x0000: 4510 0148 0000 0000 8011 3561 0105 010a E..H......5a....
0x0010: 0105 0121 0043 0044 0134 0c29 0201 0600 ...!.C.D.4.)....
0x0020: 0000 0000 0000 0000 0000 0000 0105 0121 ...............!
0x0030: 0105 010a 0000 0000 3132 3334 3536 0000 ........123456..
0x0040: 0000 0000 0000 0000 0000 0000 0000 0000 ................
0x0050: 0000 0000 0000 0000 0000 0000 0000 0000 ................
0x0060: 0000 0000 0000 0000 0000 0000 0000 0000 ................
0x0070: 0000 0000 0000 0000 0000 0000 0000 0000 ................
0x0080: 0000 0000 0000 0000 0000 0000 0000 0000 ................
0x0090: 0000 0000 0000 0000 0000 0000 0000 0000 ................
0x00a0: 0000 0000 0000 0000 0000 0000 0000 0000 ................
0x00b0: 0000 0000 0000 0000 0000 0000 0000 0000 ................
0x00c0: 0000 0000 0000 0000 0000 0000 0000 0000 ................
0x00d0: 0000 0000 0000 0000 0000 0000 0000 0000 ................
0x00e0: 0000 0000 0000 0000 0000 0000 0000 0000 ................
0x00f0: 0000 0000 0000 0000 0000 0000 0000 0000 ................
0x0100: 0000 0000 0000 0000 6382 5363 3501 0236 ........c.Sc5..6
0x0110: 0401 0501 0a33 0400 0d2f 0001 04ff ff00 .....3.../......
0x0120: 0003 0401 0501 0a1c 0401 05ff ff2a 0401 .............*..
0x0130: 0501 0aff 0000 0000 0000 0000 0000 0000 ................
0x0140: 0000 0000 0000 0000


---------------------------------------------------------------------------


TIME: 2016-09-19 10:30:15.853
IP: 1.5.1.14 (84:eb:18:e8:59:b2) > 255.255.255.255 (ff:ff:ff:ff:ff:ff)
OP: 1 (BOOTPREQUEST)
HTYPE: 1 (Ethernet)
HLEN: 6
HOPS: 0
XID: 00000000
SECS: 0
FLAGS: 0
CIADDR: 0.0.0.0
YIADDR: 0.0.0.0
SIADDR: 0.0.0.0
GIADDR: 0.0.0.0
CHADDR: 31:32:33:34:35:36:00:00:00:00:00:00:00:00:00:00
SNAME: .
FNAME: .
OPTION: 53 ( 1) DHCP message type 1 (DHCPDISCOVER)
OPTION: 54 ( 4) Server identifier 1.5.1.10
OPTION: 51 ( 4) IP address leasetime 864000 (1w3d)
---------------------------------------------------------------------------

TIME: 2016-09-19 10:30:16.855
IP: 1.5.1.10 (10:fe:ed:5:f9:53) > 1.5.1.33 (31:32:33:34:35:36)
OP: 2 (BOOTPREPLY)
HTYPE: 1 (Ethernet)
HLEN: 6
HOPS: 0
XID: 00000000
SECS: 0
FLAGS: 0
CIADDR: 0.0.0.0
YIADDR: 1.5.1.33
SIADDR: 1.5.1.10
GIADDR: 0.0.0.0
CHADDR: 31:32:33:34:35:36:00:00:00:00:00:00:00:00:00:00
SNAME: .
FNAME: .
OPTION: 53 ( 1) DHCP message type 2 (DHCPOFFER)
OPTION: 54 ( 4) Server identifier 1.5.1.10
OPTION: 51 ( 4) IP address leasetime 864000 (1w3d)
OPTION: 1 ( 4) Subnet mask 255.255.0.0
OPTION: 3 ( 4) Routers 1.5.1.10
OPTION: 28 ( 4) Broadcast address 1.5.255.255
OPTION: 42 ( 4) NTP servers 1.5.1.10

最佳答案

您首先将套接字绑定(bind)到您要通过其广播的接口(interface),在端口 68 上。设置广播选项。发送 DHCP discovery使用 writeDatagram 将数据包发送到广播地址(端口 67) .然后你只需等待对套接字的回复,你用 readDatagram 读取它.

这应该是所有需要的。

如果您没有在合理的时间内得到回复,您当然需要能够处理超时。请记住,UDP 是不可靠的。

您的程序还需要以提升的权限运行才能绑定(bind)到特权端口号。

关于c++ - Qt4.8 如何通过 QUdpSocket 接收任何数据包又名嗅探 DHCP?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39572362/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com