$NetBSD: patch-aa,v 1.3 2006/03/30 13:51:29 salo Exp $

--- main.c.orig	2003-08-07 23:55:55.000000000 +0000
+++ main.c
@@ -47,7 +47,8 @@ unsigned int
 	signlen,
 	lsr_length = 0,
 	ssr_length = 0,
-	tcp_ack;
+	tcp_ack,
+	tcp_mss;
 
 
 unsigned short int
@@ -65,6 +66,7 @@ int
 	recv_pkt = 0,
 	out_of_sequence_pkt = 0,
 	sending_wait = DEFAULT_SENDINGWAIT,	/* see DEFAULT_SENDINGWAIT */
+	opt_flood	= FALSE,
 	opt_rawipmode	= FALSE,
 	opt_icmpmode	= FALSE,
 	opt_udpmode	= FALSE,
@@ -98,6 +100,7 @@ int
 	opt_tcpexitcode	= FALSE,
 	opt_badcksum	= FALSE,
 	opt_tr_keep_ttl = FALSE,
+	opt_tcp_mss	= FALSE,
 	opt_tcp_timestamp = FALSE,
 	opt_tr_stop	= FALSE,
 	opt_tr_no_rtt	= FALSE,
@@ -179,6 +182,17 @@ int main(int argc, char **argv)
 	char setflags[1024] = {'\0'};
 	int c, hdr_size;
 
+	/* open raw socket */
+	sockraw = open_sockraw();
+	if (sockraw == -1) {
+		printf("[main] can't open raw socket\n");
+		exit(1);
+	}
+	if (getuid() && setuid(getuid()) == -1) {
+		printf("[main] can't drop privs\n");
+		exit(1);
+	}
+
 	if (parse_options(argc, argv) == -1) {
 		printf("hping2: missing host argument\n"
 			"Try `hping2 --help' for more information.\n");
@@ -219,13 +233,6 @@ int main(int argc, char **argv)
 			ifname, ifstraddr, h_if_mtu);
 	}
 
-	/* open raw socket */
-	sockraw = open_sockraw();
-	if (sockraw == -1) {
-		printf("[main] can't open raw socket\n");
-		exit(1);
-	}
-
 	/* set SO_BROADCAST option */
 	socket_broadcast(sockraw);
 	/* set SO_IPHDRINCL option */
@@ -355,6 +362,13 @@ int main(int argc, char **argv)
 		}
 	}
 
+	/* flood mode */
+	if (opt_flood) {
+		printf("Flooding...\n");
+		for (;;)
+			send_packet(0 /* dummy */);
+	}
+
 	/* start packet sending */
 	kill(getpid(), SIGALRM);
 
