$OpenBSD: patch-tools_ns6_c,v 1.1 2013/09/26 21:52:36 bluhm Exp $
--- tools/ns6.c.orig	Wed Jul 24 02:48:38 2013
+++ tools/ns6.c	Sun Sep  8 21:25:54 2013
@@ -538,8 +538,6 @@ int main(int argc, char **argv){
 
 	pcap_freecode(&pcap_filter);
 
-	srandom(time(NULL));
-    
 	/* 
 	   If the IPv6 Source Address has not been specified, and the "-F" (flood) option has
 	   not been specified, select a random link-local unicast address.
@@ -557,7 +555,7 @@ int main(int argc, char **argv){
 			srcaddr.s6_addr16[i]=0x0000;	
 	    
 		for(i=4; i<8; i++)
-			srcaddr.s6_addr16[i]=random();
+			srcaddr.s6_addr16[i]=arc4random();
 	}
 
 
@@ -598,8 +596,7 @@ int main(int argc, char **argv){
 	}
 
 	if(!hsrcaddr_f && !floods_f)	/* Source link-layer address is randomized by default */
-		for(i=0; i<6; i++)
-			hsrcaddr.a[i]= random();
+		arc4random_buf(&hsrcaddr, sizeof(struct ether_addr));
 
 	if(sllopt_f && !sllopta_f){			/* The value of the source link-layer address option  */
 		linkaddr[0]= hsrcaddr;			/* defaults to the source Ethernet address            */
@@ -808,7 +805,7 @@ void send_packet(void){
 				ipv6->ip6_src.s6_addr16[i]= 0;
 
 			for(i=startrand; i<8; i++)
-				ipv6->ip6_src.s6_addr16[i]=random();
+				ipv6->ip6_src.s6_addr16[i]=arc4random();
 
 
 			if(srcpreflen%16){
@@ -824,8 +821,7 @@ void send_packet(void){
 				ipv6->ip6_src.s6_addr16[i]= ipv6->ip6_src.s6_addr16[i] | srcaddr.s6_addr16[i];
 
 			if(!hsrcaddr_f){
-				for(i=0; i<6; i++)
-					ethernet->src.a[i]= random();
+				arc4random_buf(&ethernet->src, sizeof(struct ether_addr));
 
 				/*
 				   If the source-link layer address must be included, but no value was 
@@ -851,7 +847,7 @@ void send_packet(void){
 					ns->nd_ns_target.s6_addr16[i]= 0;
 
 				for(i=startrand; i<8; i++)
-					ns->nd_ns_target.s6_addr16[i]=random();
+					ns->nd_ns_target.s6_addr16[i]=arc4random();
 
 				if(targetpreflen%16){
 					mask=0xffff;
@@ -921,7 +917,7 @@ void send_packet(void){
 		
 					memcpy(fptr, (char *) &fraghdr, FRAG_HDR_SIZE);
 					fh= (struct ip6_frag *) fptr;
-					fh->ip6f_ident=random();
+					fh->ip6f_ident=arc4random();
 					startoffragment = fptr + FRAG_HDR_SIZE;
 		
 					/*
