1#! /bin/sh 2 3# this program collects some entropy from the system 4# into the file "my_random_file" and outputs the 16-bit 5# Unix 'sum' checksum (seems to be the only portable way 6# to get true entropy with a shell script). 7 8# Apparently, on FreeBSD /dev/random does not block (???), must make sure 9# we really got something rather than nothing. 10 11rnd_tst=no 12 13/bin/rm -f ./my_random_file 2>/dev/null 14 15if test -r "/dev/urandom"; then 16 if test -c "/dev/urandom"; then 17 dd if=/dev/urandom ibs=1 count=4 > my_random_file 2>/dev/null 18 nsum=`cksum ./my_random_file | awk '{print $1 }' | sed 's%^0*%%g' 2>/dev/null` 19 if test x$nsum != x; then 20 rnd_tst=yes 21 fi 22 fi 23fi 24 25if test x$rnd_tst = xno; then 26 if test -r "/dev/srandom"; then 27 if test -c "/dev/srandom"; then 28 dd if=/dev/srandom ibs=1 count=4 > my_random_file 2>/dev/null 29 nsum=`cksum ./my_random_file | awk '{print $1 }' | sed 's%^0*%%g' 2>/dev/null` 30 if test x$nsum != x; then 31 rnd_tst=yes 32 fi 33 fi 34 fi 35fi 36 37if test x$rnd_tst = xno; then 38# 39 touch ./my_random_file 40# 41 if test -r "/usr/ucb/vmstat"; then 42 /usr/ucb/vmstat >> my_random_file 2>/dev/null 43 fi 44 if test -r "/bin/vmstat"; then 45 /bin/vmstat >> my_random_file 2>/dev/null 46 fi 47 if test -r "/sbin/vmstat"; then 48 /sbin/vmstat >> my_random_file 2>/dev/null 49 fi 50 if test -r "/usr/bin/vmstat"; then 51 /usr/bin/vmstat >> my_random_file 2>/dev/null 52 fi 53 if test -r "/usr/sbin/vmstat"; then 54 /usr/sbin/vmstat >> my_random_file 2>/dev/null 55 fi 56 if test -r "/usr/local/bin/vmstat"; then 57 /usr/local/bin/vmstat >> my_random_file 2>/dev/null 58 fi 59# 60 if test -r "/usr/ucb/netstat"; then 61 /usr/ucb/netstat -n >> my_random_file 2>/dev/null 62 fi 63 if test -r "/bin/netstat"; then 64 /bin/netstat -n >> my_random_file 2>/dev/null 65 fi 66 if test -r "/sbin/netstat"; then 67 /sbin/netstat -n >> my_random_file 2>/dev/null 68 fi 69 if test -r "/usr/bin/netstat"; then 70 /usr/bin/netstat -n >> my_random_file 2>/dev/null 71 fi 72 if test -r "/usr/sbin/netstat"; then 73 /usr/sbin/netstat -n >> my_random_file 2>/dev/null 74 fi 75 if test -r "/usr/local/bin/netstat"; then 76 /usr/local/bin/netstat -n >> my_random_file 2>/dev/null 77 fi 78# 79# 80 if test -r "/usr/ucb/ps"; then 81 /usr/ucb/ps -ef >> my_random_file 2>/dev/null 82 fi 83 if test -r "/bin/ps"; then 84 /bin/ps -ef >> my_random_file 2>/dev/null 85 fi 86 if test -r "/sbin/ps"; then 87 /sbin/ps -ef >> my_random_file 2>/dev/null 88 fi 89 if test -r "/usr/bin/ps"; then 90 /usr/bin/ps -ef >> my_random_file 2>/dev/null 91 fi 92 if test -r "/usr/sbin/ps"; then 93 /usr/sbin/ps -ef >> my_random_file 2>/dev/null 94 fi 95 if test -r "/usr/local/bin/ps"; then 96 /usr/local/bin/ps -ef >> my_random_file 2>/dev/null 97 fi 98# 99# 100 if test -r "/usr/ucb/arp"; then 101 /usr/ucb/arp -a >> my_random_file 2>/dev/null 102 fi 103 if test -r "/bin/arp"; then 104 /bin/arp -a >> my_random_file 2>/dev/null 105 fi 106 if test -r "/sbin/arp"; then 107 /sbin/arp -a >> my_random_file 2>/dev/null 108 fi 109 if test -r "/usr/bin/arp"; then 110 /usr/bin/arp -a >> my_random_file 2>/dev/null 111 fi 112 if test -r "/usr/sbin/arp"; then 113 /usr/sbin/arp -a >> my_random_file 2>/dev/null 114 fi 115 if test -r "/usr/local/bin/arp"; then 116 /usr/local/bin/arp -a >> my_random_file 2>/dev/null 117 fi 118# 119# 120 if test -r "/usr/ucb/w"; then 121 /usr/ucb/w >> my_random_file 2>/dev/null 122 fi 123 if test -r "/bin/w"; then 124 /bin/w >> my_random_file 2>/dev/null 125 fi 126 if test -r "/sbin/w"; then 127 /sbin/w >> my_random_file 2>/dev/null 128 fi 129 if test -r "/usr/bin/w"; then 130 /usr/bin/w >> my_random_file 2>/dev/null 131 fi 132 if test -r "/usr/sbin/w"; then 133 /usr/sbin/w >> my_random_file 2>/dev/null 134 fi 135 if test -r "/usr/local/bin/w"; then 136 /usr/local/bin/w >> my_random_file 2>/dev/null 137 fi 138# 139# Don't use (NFS problems ahead) 140# 141# if test -r "/usr/ucb/df"; then 142# /usr/ucb/df >> my_random_file 2>/dev/null 143# fi 144# if test -r "/bin/df"; then 145# /bin/df >> my_random_file 2>/dev/null 146# fi 147# if test -r "/sbin/df"; then 148# /sbin/df >> my_random_file 2>/dev/null 149# fi 150# if test -r "/usr/bin/df"; then 151# /usr/bin/df >> my_random_file 2>/dev/null 152# fi 153# if test -r "/usr/sbin/df"; then 154# /usr/sbin/df >> my_random_file 2>/dev/null 155# fi 156# if test -r "/usr/local/bin/df"; then 157# /usr/local/bin/df >> my_random_file 2>/dev/null 158# fi 159# 160# 161 if test -r "/usr/ucb/free"; then 162 /usr/ucb/free >> my_random_file 2>/dev/null 163 fi 164 if test -r "/bin/free"; then 165 /bin/free >> my_random_file 2>/dev/null 166 fi 167 if test -r "/sbin/free"; then 168 /sbin/free >> my_random_file 2>/dev/null 169 fi 170 if test -r "/usr/bin/free"; then 171 /usr/bin/free >> my_random_file 2>/dev/null 172 fi 173 if test -r "/usr/sbin/free"; then 174 /usr/sbin/free >> my_random_file 2>/dev/null 175 fi 176 if test -r "/usr/local/bin/free"; then 177 /usr/local/bin/free >> my_random_file 2>/dev/null 178 fi 179# 180# 181 if test -r "/usr/ucb/uptime"; then 182 /usr/ucb/uptime >> my_random_file 2>/dev/null 183 fi 184 if test -r "/bin/uptime"; then 185 /bin/uptime >> my_random_file 2>/dev/null 186 fi 187 if test -r "/sbin/uptime"; then 188 /sbin/uptime >> my_random_file 2>/dev/null 189 fi 190 if test -r "/usr/bin/uptime"; then 191 /usr/bin/uptime >> my_random_file 2>/dev/null 192 fi 193 if test -r "/usr/sbin/uptime"; then 194 /usr/sbin/uptime >> my_random_file 2>/dev/null 195 fi 196 if test -r "/usr/local/bin/uptime"; then 197 /usr/local/bin/uptime >> my_random_file 2>/dev/null 198 fi 199# 200# 201 if test -r "/usr/ucb/procinfo"; then 202 /usr/ucb/procinfo -a >> my_random_file 2>/dev/null 203 fi 204 if test -r "/bin/procinfo"; then 205 /bin/procinfo -a >> my_random_file 2>/dev/null 206 fi 207 if test -r "/sbin/procinfo"; then 208 /sbin/procinfo -a >> my_random_file 2>/dev/null 209 fi 210 if test -r "/usr/bin/procinfo"; then 211 /usr/bin/procinfo -a >> my_random_file 2>/dev/null 212 fi 213 if test -r "/usr/sbin/procinfo"; then 214 /usr/sbin/procinfo -a >> my_random_file 2>/dev/null 215 fi 216 if test -r "/usr/local/bin/procinfo"; then 217 /usr/local/bin/procinfo -a >> my_random_file 2>/dev/null 218 fi 219# 220 nsum=`cksum ./my_random_file | awk '{print $1 }' | sed 's%^0*%%g' 2>/dev/null` 221# 222fi 223 224# 225# 'cksum' is more portable than 'sum', but 32 bit 226# 227 228/bin/rm -f ./my_random_file 2>/dev/null 229 230final=`expr $nsum \% 65536` 231echo $final 232 233 234