From 3bef88f7e5bd2ad9c4250a0f6873ba6113bd002f Mon Sep 17 00:00:00 2001 From: "Alan T. DeKok" Date: Wed, 23 Oct 2013 07:14:19 -0700 Subject: [PATCH] Added giaddr option --- dhtest.c | 9 ++++++++- functions.c | 7 ++++--- 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/dhtest.c b/dhtest.c index 86b64c9..13700f3 100644 --- a/dhtest.c +++ b/dhtest.c @@ -56,6 +56,7 @@ u_int16_t fqdn_n = 0; u_int16_t fqdn_s = 0; u_int32_t option51_lease_time = 0; u_int32_t port = 67; +u_char *giaddr = "0.0.0.0"; /* Pointers for all layer data structures */ struct ethernet_hdr *eth_hg = { 0 }; @@ -106,6 +107,7 @@ void print_help(char *cmd) fprintf(stdout, " -s, --fqdn-server-update-a\t\t# Sets FQDN server update flag\n"); fprintf(stdout, " -p, --padding\t\t\t\t# Add padding to packet to be at least 300 bytes\n"); fprintf(stdout, " -P, --port\t\t[ port ]\t# Use port instead of 67\n"); + fprintf(stdout, " -g, --giaddr\t\t[ giaddr ]\t# Use giaddr instead of 0.0.0.0\n"); fprintf(stdout, " -V, --verbose\t\t\t\t# Prints DHCP offer and ack details\n"); fprintf(stdout, " dhtest version 1.2\n"); } @@ -141,13 +143,14 @@ int main(int argc, char *argv[]) { "fqdn-domain-name", required_argument, 0, 'd'}, { "padding", no_argument, 0, 'p'}, { "port", required_argument, 0, 'P'}, + { "giaddr", required_argument, 0, 'g'}, { "release", no_argument, 0, 'r'}, { 0, 0, 0, 0 } }; /*getopt routine to get command line arguments*/ while(get_tmp < argc) { - get_cmd = getopt_long(argc, argv, "m:i:v:t:bfVrpT:P:I:o:k:L:h:n:s:d:",\ + get_cmd = getopt_long(argc, argv, "m:i:v:t:bfVrpT:P:g:I:o:k:L:h:n:s:d:",\ long_options, &option_index); if(get_cmd == -1 ) { break; @@ -279,6 +282,10 @@ int main(int argc, char *argv[]) port = atoi(optarg); break; + case 'g': + giaddr = optarg; + break; + case 'p': padding_flag = 1; break; diff --git a/functions.c b/functions.c index 6d8fd87..6b0dc37 100644 --- a/functions.c +++ b/functions.c @@ -44,6 +44,7 @@ extern u_int8_t hostname_buff[256]; extern u_int8_t fqdn_buff[256]; extern u_int32_t option51_lease_time; extern u_int32_t port; +extern u_char *giaddr; extern struct ethernet_hdr *eth_hg; extern struct vlan_hdr *vlan_hg; @@ -653,7 +654,7 @@ int build_dhpacket(int pkt_type) dhpointer->dhcp_cip = 0; dhpointer->dhcp_yip = 0; dhpointer->dhcp_sip = 0; - dhpointer->dhcp_gip = 0; + dhpointer->dhcp_gip = inet_addr(giaddr); memcpy(dhpointer->dhcp_chaddr, dhmac, ETHER_ADDR_LEN); /*dhpointer->dhcp_sname dhpointer->dhcp_file*/ @@ -720,7 +721,7 @@ int build_dhpacket(int pkt_type) dhpointer->dhcp_cip = 0; dhpointer->dhcp_yip = 0; dhpointer->dhcp_sip = 0; - dhpointer->dhcp_gip = 0; + dhpointer->dhcp_gip = inet_addr(giaddr); memcpy(dhpointer->dhcp_chaddr, dhmac, ETHER_ADDR_LEN); /*dhpointer->dhcp_sname dhpointer->dhcp_file*/ @@ -787,7 +788,7 @@ int build_dhpacket(int pkt_type) dhpointer->dhcp_cip = option50_ip; dhpointer->dhcp_yip = 0; dhpointer->dhcp_sip = 0; - dhpointer->dhcp_gip = 0; + dhpointer->dhcp_gip = inet_addr(giaddr); memcpy(dhpointer->dhcp_chaddr, dhmac, ETHER_ADDR_LEN); /*dhpointer->dhcp_sname dhpointer->dhcp_file*/