Skip to content

Commit e35c380

Browse files
committed
Added broadcast option!
1 parent bb95671 commit e35c380

File tree

3 files changed

+27
-7
lines changed

3 files changed

+27
-7
lines changed

include/Options.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ struct Options {
1717
bool enableServer = false;
1818

1919
// DhcpServerOptions
20+
unsigned short serverFlags = 0;
2021
unsigned short lease = 0;
2122
netaddr_ip gateway{};
2223
netaddr_ip primaryDns{};

src/Core.cpp

Lines changed: 20 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,7 @@ void Core::dhcpServer(DhcpPacket *message) {
7373
0,
7474
message->xid,
7575
0,
76-
DHCP_FLAGS_BROADCAST,
76+
this->options.serverFlags,
7777
nullptr,
7878
&slot->clientIp,
7979
&this->socket.netinfo.ipAddr,
@@ -82,11 +82,19 @@ void Core::dhcpServer(DhcpPacket *message) {
8282
nullptr);
8383
memcpy(response.chaddr, message->chaddr, ETHHWASIZE);
8484
this->addDhcpDefaultOpt(&response, slot, DHCP_OFFER);
85+
8586
// INFO
8687
pktInfo.ipSrc = this->socket.netinfo.ipAddr;
87-
pktInfo.ipDst.ip = 0xFFFFFFFF;
88-
eth_bcast(&pktInfo.phisAddr);
8988
pktInfo.toServer = false;
89+
90+
if (this->options.serverFlags & DHCP_FLAGS_BROADCAST) {
91+
pktInfo.ipDst.ip = 0xFFFFFFFF;
92+
eth_bcast(&pktInfo.phisAddr);
93+
} else {
94+
pktInfo.ipDst.ip = slot->clientIp.ip;
95+
memcpy(pktInfo.phisAddr.mac, message->chaddr, ETHHWASIZE);
96+
}
97+
9098
if ((tmp = this->socket.sendDhcpMsg(&response, DHCPPKTSIZE, &pktInfo)) < 0)
9199
std::cerr << "DHCP server err: " << spark_strerror(tmp) << std::endl;
92100
} else if (dhcp_type_equals(message, DHCP_REQUEST)) {
@@ -112,7 +120,7 @@ void Core::dhcpServer(DhcpPacket *message) {
112120
0,
113121
message->xid,
114122
0,
115-
DHCP_FLAGS_BROADCAST,
123+
this->options.serverFlags,
116124
nullptr,
117125
&slot->clientIp,
118126
&this->socket.netinfo.ipAddr,
@@ -121,11 +129,17 @@ void Core::dhcpServer(DhcpPacket *message) {
121129
nullptr);
122130
memcpy(response.chaddr, message->chaddr, ETHHWASIZE);
123131
this->addDhcpDefaultOpt(&response, slot, DHCP_ACK);
132+
124133
// INFO
125134
pktInfo.ipSrc = this->socket.netinfo.ipAddr;
126-
pktInfo.ipDst.ip = 0xFFFFFFFF;
127-
eth_bcast(&pktInfo.phisAddr);
128135
pktInfo.toServer = false;
136+
if (this->options.serverFlags & DHCP_FLAGS_BROADCAST) {
137+
pktInfo.ipDst.ip = 0xFFFFFFFF;
138+
eth_bcast(&pktInfo.phisAddr);
139+
} else {
140+
pktInfo.ipDst.ip = slot->clientIp.ip;
141+
memcpy(pktInfo.phisAddr.mac, message->chaddr, ETHHWASIZE);
142+
}
129143
if ((tmp = this->socket.sendDhcpMsg(&response, DHCPPKTSIZE, &pktInfo)) < 0)
130144
std::cerr << "DHCP server err: " << spark_strerror(tmp) << std::endl;
131145
} else if (dhcp_type_equals(message, DHCP_RELEASE))

src/main.cpp

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ int main(int argc, char **argv) {
3535
{(char *) "no-release", ARGSX_NOARG, 4},
3636
{(char *) "help", ARGSX_NOARG, 'h'},
3737
{(char *) "version", ARGSX_NOARG, 'v'},
38+
{(char *) "bcast", ARGSX_NOARG, 'b'},
3839
{(char *) "server", ARGSX_NOARG, 's'},
3940
{(char *) "gateway", ARGSX_REQ_ARG, 'g'},
4041
{(char *) "lease", ARGSX_NOARG, 'l'},
@@ -46,7 +47,7 @@ int main(int argc, char **argv) {
4647
return 0;
4748
}
4849

49-
while ((opt = argsx(argc, argv, (char *) "hvsg!ld!", lopt, sizeof(lopt), '-')) != -1) {
50+
while ((opt = argsx(argc, argv, (char *) "hvbsg!ld!", lopt, sizeof(lopt), '-')) != -1) {
5051
switch (opt) {
5152
case 1:
5253
core.options.mode |= ATKMODE_FLOOD;
@@ -70,6 +71,9 @@ int main(int argc, char **argv) {
7071
__DATE__, __TIME__);
7172
#endif
7273
return 0;
74+
case 'b':
75+
core.options.serverFlags |= DHCP_FLAGS_BROADCAST;
76+
break;
7377
case 's':
7478
core.options.enableServer = true;
7579
break;
@@ -139,6 +143,7 @@ void usage() {
139143
"\nUsage: %s <iface> --<flood|release|starvation>\n"
140144
"\t-h, --help \tPrint this help and exit.\n"
141145
"\t-v, --version\tPrint version and exit.\n"
146+
"\t-b, --bcast \tUse broadcast reply.\n"
142147
"\t-s, --server \tEnable dhcp rogue server.\n"
143148
"\t-l, --lease \tSet lease time.\n"
144149
"\t-d, --dns \tSet primary DNS address.\n"

0 commit comments

Comments
 (0)