A Simple Log Cleaner for Apache referer_log

How to clean the Apache referrer log and see the search strings being used to find your pages.

Apache Logs

The Apache web server can maintain a log of "referrers" if you ask it to. When a client loads a page, Apache recorded the request in the file /var/www/logs/access_log and, if this is enabled, the referring page is recorded in /var/www/logs/referer_log (that's just how Apache wants to spell it).

Let's say a remote user using a client machine at IP address 1.2.3.4 was reading someone else's page http://somehost.com/. They see a hyperlink pointing to one of your page, http://yourhost.com/somepage.html. Two things are logged on your server when the user clicks on that link:

/var/www/logs/access_log gets a new line, looking something like this:

1.2.3.4 - - [08/Feb/12:01:02:56 -0500] "GET /somepage.html HTTP/1.1" 200 7340

/var/www/logs/referer_log gets a new line, looking something like this:

1.2.3.4 -- http://somehost.com/blah/blah.html -> /somepage.html

Now that's kind of interesting, it shows you the pages on the Internet with static links pointing to your pages. What many people find more interesting is the list of search strings people have entered at Google and other search engines to reach your pages.

We can do this, the referring URL includes the search engine hostname and path to its search page, as well as the search string itself! However, that takes a little massaging before it's easy to read. Here is an example. This is really one line of 241 characters, I have broken it at 80 columns so it fits in your browser:

81.184.32.18 -- http://www.google.es/search?hl=es&client=firefox-a&rls=org.mozil
la:es-ES:official&hs=GMa&ei=1KlwSomeMIysjAf8l4SZBQ&sa=X&oi=spell&resnum=0&ct=res
ult&cd=1&q=packet+sniffing+tools+for+windows&spell=1 -> /security/monitoring.htm
l

Analyzing Referrer URLs

Look at that a piece at a time. The client is at IP address 81.184.32.18, which resolves back to a hostname of 81.184.32.18.dyn.user.ono.com. That IP address belongs to an Internet service provider in Aravaca, Spain, according to the whois output:

inetnum:        81.184.0.0 - 81.184.88.255
netname:        MENTA-CABLEMODEMS
descr:          AUNA - CTC
descr:          Internet de Banda Ampla
descr:          CableModem
country:        ES
[....]
role:           Techauna AUNA
address:        C/ Basauri, 7-9 La Florida, Aravaca
address:        Aravaca (28023)
address:        Spain
phone:          +34911809300

The client did a search from the page http://www.google.es/search, Google's Spanish language search interface. The rest of the referring URL is a collection of variable=value pairs strung together with the ampersand character, &. They specify things like the client's browser, preferred languages, whether Google should do spell checking and the type and number of results desired, and so on. The query itself is specified by q=..., can you find it?

There it is, almost at the end. They asked the Spanish Google page an English query:

packet sniffing tools for windows

Google has made that list of strings into a single string with + characters between the original components. Here it is, highlighted:

81.184.32.18 -- http://www.google.es/search?hl=es&client=firefox-a&rls=org.mozil
la:es-ES:official&hs=GMa&ei=1KlwSomeMIysjAf8l4SZBQ&sa=X&oi=spell&resnum=0&ct=res
ult&cd=1&q=packet+sniffing+tools+for+windows&spell=1 -> /security/monitoring.htm
l

From the list of search results, they clicked on the link to my page about protocol analysis, network monitoring, and packet sniffing. Really, that enormously long Google URL is the search result page itself. The user clicked on something on that dynamically generated search result page that led to my page.

This doesn't look too bad, but there are three things to look out for.

First, not all search engines use q=. Yahoo uses p=. Mywebsearch.com uses searchfor=, which I'm going to remap to q= in an early step.

Second, some searches contain similar variables like aq=... or oq=... when we're expecting q=... on Google. So, we have to be careful about simply saying "Everything after the q= or p= will be the search query." The variable=value pairs don't appear in any predictable order, so we can't look for the first or last instance of q= or p=.

The trick is to notice that the list of variable=value pairs starts after a question mark, ?, and is separated by ampsersands, &. So, the criteria is really: "Everything after either ?q= or &q= or ?p= or &p= will be the search query."

Well, no, not everything after either of those two strings — just everything up to either another ampersand (starting the next variable=value pair) or a blank space (the query happened to be the last one).

Third, the search engine and the client's browser may replace some characters with their ASCII codes. Instead of a literal space character, there will be %20 because the ASCII code for the space character is hexadecimal 0x20. Here's an example with a punctuation mark. The user typed TCP/IP Class handouts and the slash character / was replaced with the ASCII code %2F. That could appear as either %2F or %2f, we have to account for both upper and lower case ASCII codes.

209.136.52.205 -- http://www.google.com/search?hl=en&q=TCP%2FIP+Class+handouts&aq=f&oq=&aqi= -> /tcpip/

The Solution

What we want to do to each line is:

  1. Except for ASCII code %25, which is a literal %, replace every %xx ASCII code with the corresponding character.
  2. Now replace every %25 with a literal %.
  3. Delete all characters up to the first instance of any one of ?q= or &q= or ?p= or &p=.
  4. If there are any remaining variable=value pairs, delete them. That is, delete everything from the next & up to the string ->.
  5. Replace every + character with a blank space.

This is just one big sed command! Instead of a bunch of sed commands piped together, I can just run one with multiple edit strings. I have put it in a file, a one-line shell script:

#!/bin/sh

# Clean up search strings from /var/www/logs/referer_log

sed -e 's/%[01]./ /g' \
	-e 's/%20/ /g' \
	-e 's/%21/!/g' \
	-e 's/%22/"/g' \
	-e 's/%23/#/g' \
	-e 's/%24/$/g' \
	-e 's/%26/\&/g' \
	-e "s/%27/'/g" \
	-e 's/%28/(/g' \
	-e 's/%29/)/g' \
	-e 's/%2[Aa]/*/g' \
	-e 's/%2[Bb]/+/g' \
	-e 's/%2[Cc]/,/g' \
	-e 's/%2[Ee]/./g' \
	-e 's/%2[Dd]/-/g' \
	-e 's@%2[Ff]@/@g' \
	-e 's/%30/0/g' \
	-e 's/%31/1/g' \
	-e 's/%32/2/g' \
	-e 's/%33/3/g' \
	-e 's/%34/4/g' \
	-e 's/%35/5/g' \
	-e 's/%36/6/g' \
	-e 's/%37/7/g' \
	-e 's/%38/8/g' \
	-e 's/%39/9/g' \
	-e 's/%3[Aa]/:/g' \
	-e 's/%3[Bb]/;/g' \
	-e 's/%3[Cc]/</g' \
	-e 's/%3[Dd]/=/g' \
	-e 's/%3[Ee]/>/g' \
	-e 's/%3[Ff]/?/g' \
	-e 's/%40/@/g' \
	-e 's/%5[Bb]/\[/g' \
	-e 's/%5[Cc]/\\/g' \
	-e 's/%5[Dd]/\]/g' \
	-e 's/%5[Ee]/^]/g' \
	-e 's/%5[Ff]/_]/g' \
	-e 's/%60/`/g' \
	-e 's/%7[Bb]/{]/g' \
	-e 's/%7[Cc]/|]/g' \
	-e 's/%7[Dd]/}]/g' \
	-e 's/%7[Ee]/~]/g' \
	-e 's/%25/%/g' \
	-e 's/?searchfor=/?q=/' \
	-e 's/.*[?&][pq]=//' \
	-e 's/&.*=.* ->/ ->/' \
	-e 's/+/ /g' \
	-e 's/  */ /g' \
	-e 's/^ //'

Using That Program

I have that shell script in a directory in my command search path, ~/bin/script/log-clean as I've organized things. Notice that it ignores any command-line parameters, it simple reads from standard input and writes to standard output. That's because I want to be able to easily use it in various ways:

What are all the searches?  Generally speaking, searches
contain "=".  Google image searches contain "imgurl=" and
they aren't as useful for this analysis.
  % grep "=" /var/www/logs/referer_log | grep -v "imgurl=" | log-clean

What about just Google non-image searches?
  % grep "google" /var/www/logs/referer_log | grep -v images.google | log-clean

What about Google vs Yahoo?
  % grep "google" /var/www/logs/referer_log | grep -v "imgurl=" | log-clean
  % grep "yahoo" /var/www/logs/referer_log | log-clean

Those work, but they aren't very useful because they simply print the cleaned versions in the order in which they occurred. Here is a much more interesting question that we can now easily answer:

What is the complete list of searches used to find my pages, sorted in order of popularity? I would like to know the search string itself, how many times that was used, and its rank. Oh, and since people are erratic about capitalization, and some people think that Google pays more attention if you SHOUT IN ALL CAPS, I should force the queries to all lower case before doing the analysis. Oh, and I don't want to know about strange things that only happened once or a few times, let's limit this to searches done 10 times or more. Does this sound like a complicated request? This is easy in Unix!

% grep "=" /var/www/logs/referer_log | grep -v "imgurl=" |       \
        log-clean |                                              \
	tr 'A-Z' 'a-z' | sort | uniq -c | sort -nr | awk '$1 > 9' | cat -n

KEY:
  log-clean     We already know what this does...
  tr            Replaces upper case with lower case.
  sort          Reorder the lines into lexicographic order,
                grouping identical lines together.
  uniq -c       Counts sequences of identical lines, replacing
                each block with the count and the line content.
  sort -nr      Reorder the lines into reverse numerical order, numerical
                because of the -n and reverse order because of the -r.
  awk '$1 > 9'  Only output those lines where field #1
                is numerically greater than 9.
  cat -n        Insert line numbers before each line.

And what is the result of that?

Here are the results for a log covering about six weeks. The Internet is a very strange place....

     1      983 turkish grammar -> /turkish/
     2      396 build linux kernel -> /unix/linux-kernel.html
     3      327 toilets of the world -> /toilet/
     4      252 build kernel -> /unix/linux-kernel.html
     5      237 parkerizing -> /garand/parkerizing/
     6      176 confederation of the lusitanian union -> /security/netusers/Index/pt
     7      158 how to build linux kernel -> /unix/linux-kernel.html
     8      140 toilets -> /toilet/
     9      139 linux kernel build -> /unix/linux-kernel.html
    10      139 how to parkerize -> /garand/parkerizing/
    11      134 latex cyrillic -> /russian/latex.html
    12      123 turkish verbs -> /turkish/verbs.html
    13      120 building linux kernel -> /unix/linux-kernel.html
    14       99 adsense xhtml -> /technical/google-adsense-and-xhtml.html
    15       95 parkerize -> /garand/parkerizing/
    16       93 net.ipv4.tcp_max_syn_backlog -> /security/security-stack-hardening.html
    17       89 sniffing tools -> /security/monitoring.html
    18       85 how to build kernel -> /unix/linux-kernel.html
    19       84 make kernel -> /unix/linux-kernel.html
    20       84 histogram equalization -> /3d/histogram/
    21       81 network sniffing tools -> /security/monitoring.html
    22       80 linux build kernel -> /unix/linux-kernel.html
    23       78 net.ipv4.conf.all.rp_filter -> /security/security-stack-hardening.html
    24       78 kernel build -> /unix/linux-kernel.html
    25       78 confederation lusitanian union -> /security/netusers/Index/pt
    26       74 cr0 net code network -> /security/monitoring.html
    27       72 toilets around the world -> /toilet/
    28       69 oscilloscope probes -> /radio/probes.html
    29       67 oscilloscope probe -> /radio/probes.html
    30       66 cyrillic latex -> /russian/latex.html
    31       64 european toilets -> /toilet/see.html
    32       62 stainless steel toilet -> /toilet/stainless.html
    33       62 pictures of toilets -> /toilet/
    34       59 unix ipconfig -> /tcpip/commands.html
    35       59 toilet -> /toilet/
    36       57 computer network security -> /security/
    37       56 turkish grammar -> /turkish/background.html
    38       56 how to build a linux kernel -> /unix/linux-kernel.html
    39       56 confutatis maledictis -> /fun/latin.html
    40       55 linux ip config -> /tcpip/commands.html
    41       54 network sniffing -> /security/monitoring.html
    42       53 movie concepts -> /fun/brilliant-movie-ideas/
    43       53 lan monitoring -> /security/monitoring.html
    44       51 what is ipsec -> /tcpip/what-is-ipsec.html
    45       51 ardennes forest -> /travel/belgium/bastogne-ardennes/
    46       50 how linux boots -> /unix/linux-boot.html
    47       49 how to build a kernel -> /unix/linux-kernel.html
    48       48 compile linux kernel -> /unix/linux-kernel.html
    49       47 sniffing tool -> /security/monitoring.html
    50       46 roman toilets -> /toilet/imperialroman.html
    51       46 parkerizing solution -> /garand/parkerizing/
    52       46 human toilets -> /toilet/nonhuman.html
    53       44 tcp_strong_iss -> /security/security-stack-hardening.html
    54       43 how to parkerize a gun -> /garand/parkerizing/
    55       43 how to make a kernel -> /unix/linux-kernel.html
    56       43 how to compile linux kernel -> /unix/linux-kernel.html
    57       42 steampunk projects -> /steampunk/
    58       41 ipconfig commands -> /tcpip/commands.html
    59       40 kernel make -> /unix/linux-kernel.html
    60       40 guitar gun case -> /garand/m1-garand-assembly/case.html
    61       40 ghostbusters headquarters -> /travel/usa/ghostbusters/
    62       40 cncgroup hebei province network -> /security/security-attack-study.html
    63       39 verify digital signature -> /security/verify-digital-signature.html
    64       39 bluing steel -> /garand/debluing/
    65       38 contrast enhancement -> /3d/histogram/
    66       38 ardennes forest map -> /travel/belgium/bastogne-ardennes/
    67       37 unix ip config -> /tcpip/commands.html
    68       37 turkish grammar online -> /turkish/background.html
    69       35 how to use ftp in linux -> /unix/ftp-howto.html
    70       34 turkish suffixes -> /turkish/turkish-suffixes.html
    71       34 sendmail ssl -> /unix/sendmail-ssl.html
    72       34 protocol header -> /tcpip/protocols.html
    73       34 learn turkish grammar -> /turkish/
    74       34 ipconfig linux -> /tcpip/commands.html
    75       33 wireless sniffing windows -> /security/monitoring.html
    76       33 unix ip commands -> /tcpip/commands.html
    77       33 cisco catalyst 2900 -> /tcpip/switch-programming.html
    78       32 www.alqaida.com -> /security/netusers/Index/aq
    79       32 wan link -> /tcpip/wan-specs.html
    80       32 oscilloscope probe circuit -> /radio/probes.html
    81       31 turkish pronouns -> /turkish/nouns.html
    82       31 linux ip config command -> /tcpip/commands.html
    83       31 computer system security -> /security/
    84       31 build kernel linux -> /unix/linux-kernel.html
    85       30 world toilets -> /toilet/
    86       30 turkish grammar -> /turkish/nouns.html
    87       30 stainless steel toilets -> /toilet/stainless.html
    88       30 how to remove bluing -> /garand/debluing/
    89       30 build linux -> /unix/linux-kernel.html
    90       30 7 deadly sins spear street google secret service -> /security/cyberwar.html
    91       29 linux kernel compile -> /unix/linux-kernel.html
    92       29 how routing works -> /tcpip/routing.html
    93       28 jim morrison paris -> /travel/france/jim-morrison-paris.html
    94       28 http://www.cr0.net:8040/code/network/ -> /security/monitoring.html
    95       28 dover tunnels -> /travel/uk/dover/
    96       28 building kernel -> /unix/linux-kernel.html
    97       27 wan links -> /tcpip/wan-specs.html
    98       27 turkish grammar -> /turkish/verbs.html
    99       27 ipconfig unix -> /tcpip/commands.html
   100       27 ghostbusters headquarters building -> /travel/usa/ghostbusters/
   101       27 ghostbusters -> /travel/usa/ghostbusters/
   102       26 unix commands ip -> /tcpip/commands.html
   103       26 linux ip configuration command -> /tcpip/commands.html
   104       26 jim morrison in paris -> /travel/france/jim-morrison-paris.html
   105       26 how to make a gun case -> /garand/m1-garand-assembly/case.html
   106       26 how to build the linux kernel -> /unix/linux-kernel.html
   107       26 free computer forensic tools -> /security/security-forensics.html
   108       26 chimera turkey -> /travel/turkey/olimpos/
   109       26 bastogne battle of the bulge -> /travel/belgium/bastogne-ardennes/
   110       26 adaptive histogram equalization -> /3d/histogram/
   111       25 train toilets -> /toilet/train.html
   112       25 tektronix 2445a -> /radio/tek2445a.html
   113       25 lan monitoring tool -> /security/monitoring.html
   114       25 intrusion detection tools -> /security/security-intrusion.html
   115       25 eastern toilets -> /toilet/
   116       25 confutatis maledictis flammis acribus addictis -> /fun/latin.html
   117       25 asian toilets -> /toilet/
   118       24 turkish basics -> /turkish/
   119       24 jim morrison -> /toilet/france.html
   120       24 highest peak in scotland -> /travel/uk/ben-nevis/
   121       23 m1 garand parts -> /garand/m1-garand-assembly/
   122       23 lan monitoring tools -> /security/monitoring.html
   123       23 garand parts -> /garand/m1-garand-assembly/
   124       23 basic turkish grammar -> /turkish/
   125       23 ancient toilets -> /toilet/
   126       22 network sniffing tool -> /security/monitoring.html
   127       22 building a linux kernel -> /unix/linux-kernel.html
   128       22 british toilets -> /toilet/britain.html
   129       21 verifying digital signature -> /security/verify-digital-signature.html
   130       21 turkish grammar rules -> /turkish/
   131       21 toilets of the world -> /toilet/middle-east.html
   132       21 small hf antenna -> /radio/hf-short-dipoles.html
   133       21 oliver cromwell -> /oliver/
   134       21 net.inet.ip.redirect -> /security/security-stack-hardening.html
   135       21 linux ip configuration -> /tcpip/commands.html
   136       21 ip config linux -> /tcpip/commands.html
   137       21 image contrast enhancement -> /3d/histogram/
   138       20 turkish language grammar -> /turkish/background.html
   139       20 ssh access control -> /unix/ssh.html
   140       20 ipconfig in unix -> /tcpip/commands.html
   141       20 how nat works -> /tcpip/nat.html
   142       20 eastern toilets -> /toilet/see.html
   143       20 build a linux kernel -> /unix/linux-kernel.html
   144       19 make linux kernel -> /unix/linux-kernel.html
   145       19 linux tcp ip commands -> /tcpip/commands.html
   146       19 how to make kernel -> /unix/linux-kernel.html
   147       19 hieropolis -> /travel/turkey/pamukkale/
   148       18 unix display ip address -> /tcpip/commands.html
   149       18 remove bluing -> /garand/debluing/
   150       18 rc.sysinit in linux -> /unix/linux-boot.html
   151       18 jenny mccarthy -> /fun/brilliant-movie-ideas/news.html
   152       18 hotel de medicis paris -> /travel/france/jim-morrison-paris.html
   153       18 futuristic toilets -> /toilet/hightech.html
   154       18 avebury uk -> /travel/uk/avebury/
   155       18 asian toilets -> /toilet/middle-east.html
   156       17 unix show ip address -> /tcpip/commands.html
   157       17 unix ip command -> /tcpip/commands.html
   158       17 turkish vowel harmony -> /turkish/orthography.html
   159       17 toilet squatting platform -> /toilet/install.html
   160       17 stainless toilets -> /toilet/stainless.html
   161       17 springfield armory m1 garand serial numbers -> /garand/m1-garand-assembly/vintage.html
   162       17 packet sniffing tools -> /security/monitoring.html
   163       17 m1 garand drawing numbers -> /garand/spreadsheet.html
   164       17 linux kernel build howto -> /unix/linux-kernel.html
   165       17 ipconfig in linux -> /tcpip/commands.html
   166       17 ipconfig for linux -> /tcpip/commands.html
   167       17 ip config unix -> /tcpip/commands.html
   168       17 grammar turkish -> /turkish/
   169       17 build oscilloscope probe -> /radio/probes.html
   170       16 network monitoring tools -> /security/monitoring.html
   171       16 french toilets -> /toilet/links.html
   172       16 deaths on ben nevis -> /travel/uk/ben-nevis/
   173       16 cyrillic in latex -> /russian/latex.html
   174       16 cisco 3550 -> /tcpip/switch-programming.html
   175       16 bluing remover -> /garand/debluing/
   176       16 ben nevis deaths -> /travel/uk/ben-nevis/
   177       16 arlington hall -> /travel/usa/us-wash-ah.html
   178       15 wlan sniffing -> /security/monitoring.html
   179       15 toilet of the world -> /toilet/
   180       15 strait gallipoli peninsula -> /travel/turkey/gallipoli/
   181       15 make oscilloscope probe -> /radio/probes.html
   182       15 linux network sniffing tools -> /security/monitoring.html
   183       15 linux build -> /unix/linux-kernel.html
   184       15 how to verify digital signature -> /security/verify-digital-signature.html
   185       15 how to compile kernel -> /unix/linux-kernel.html
   186       15 hardening openbsd -> /security/linux-hardening.html
   187       15 hardening linux -> /security/linux-hardening.html
   188       15 guangxi filterui:photo-photo -> /toilet/revolutionPRC.html
   189       15 ghostbusters locations -> /travel/usa/ghostbusters/
   190       15 free computer forensics tools -> /security/security-forensics.html
   191       15 chinese toilets -> /toilet/
   192       15 build a kernel -> /unix/linux-kernel.html
   193       14 toilet world -> /toilet/
   194       14 tektronix 2445 -> /radio/tek2445a.html
   195       14 qemu linux usb -> /unix/qemu-unix.html
   196       14 puppy linux qemu -> /unix/qemu-unix.html
   197       14 programming cisco switches -> /tcpip/switch-programming.html
   198       14 program cisco switch -> /tcpip/switch-programming.html
   199       14 network security -> /security/
   200       14 linux kernel make -> /unix/linux-kernel.html
   201       14 linux kernel building -> /unix/linux-kernel.html
   202       14 linux ip information -> /tcpip/commands.html
   203       14 linux hardening -> /security/linux-hardening.html
   204       14 international toilets -> /toilet/
   205       14 how to build linux -> /unix/linux-kernel.html
   206       14 greyhound bus toilet -> /toilet/bus.html
   207       14 catalyst 2900 -> /tcpip/switch-programming.html
   208       14 building linux -> /unix/linux-kernel.html
   209       14 ben nevis trail -> /travel/uk/ben-nevis/
   210       13 zepp antenna -> /radio/j-poles.html
   211       13 unix tcp ip commands -> /tcpip/commands.html
   212       13 unix ip configuration -> /tcpip/commands.html
   213       13 tektronix oscilloscope -> /radio/tek2445a.html
   214       13 qemu puppy -> /unix/qemu-unix.html
   215       13 parkerizing process -> /garand/parkerizing/
   216       13 network security system -> /security/
   217       13 learn turkish grammar -> /turkish/background.html
   218       13 kernel build howto -> /unix/linux-kernel.html
   219       13 kata ton daimona eautou -> /travel/france/jim-morrison-paris.html
   220       13 ip unix -> /tcpip/commands.html
   221       13 interesting toilets -> /toilet/
   222       13 how to program a cisco switch -> /tcpip/switch-programming.html
   223       13 egyptian toilets -> /toilet/
   224       13 custom gun cases -> /garand/m1-garand-assembly/case.html
   225       13 building a kernel -> /unix/linux-kernel.html
   226       13 brecourt manor -> /travel/france/normandy/brecourt-manor.html
   227       12 would you like to enable as a cluster command switch -> /tcpip/switch-programming.html
   228       12 unix firewall -> /security/security-firewall.html
   229       12 unix command ipconfig -> /tcpip/commands.html
   230       12 toilets of the world -> /toilet/hightech.html
   231       12 toilets in the world -> /toilet/
   232       12 sniff tool -> /security/monitoring.html
   233       12 rose valley turkey -> /travel/turkey/goreme/
   234       12 openbsd hardening -> /security/linux-hardening.html
   235       12 net.ipv4.conf.all.rp_filter=0 -> /security/security-stack-hardening.html
   236       12 making a kernel -> /unix/linux-kernel.html
   237       12 m1 garand parts -> /garand/m1-garand-assembly/vintage.html
   238       12 list of suffixes -> /turkish/turkish-suffixes.html
   239       12 linux ipconfig -> /tcpip/commands.html
   240       12 linux ip info -> /tcpip/commands.html
   241       12 kata ton jim morrison -> /travel/france/jim-morrison-paris.html
   242       12 ip configuration in linux -> /tcpip/commands.html
   243       12 ip config in linux -> /tcpip/commands.html
   244       12 howto build linux kernel -> /unix/linux-kernel.html
   245       12 how to calculate subnet number -> /tcpip/tcpip-subnetting.txt
   246       12 how to build a gun case -> /garand/m1-garand-assembly/case.html
   247       12 firewall tools -> /security/security-firewall.html
   248       12 confutatis maledictis, flammis acribus addictis -> /fun/latin.html
   249       12 calculate normal -> /3d/normals.html
   250       12 bluing -> /garand/debluing/
   251       12 255.254.0.0 -> /tcpip/
   252       11 windows wireless sniffing -> /security/monitoring.html
   253       11 turkish language basics -> /turkish/background.html
   254       11 toilet signage -> /toilet/signage.html
   255       11 tcp/ip commands -> /tcpip/commands.html
   256       11 tcp ip unix -> /tcpip/commands.html
   257       11 sit vis tecum -> /fun/latin.html
   258       11 russian grammar table -> /russian/grammar.html
   259       11 rtsp internet radio -> /radio/internet-radio.html
   260       11 network security audit tools -> /security/security-netaudit.html
   261       11 monitoring lan -> /security/monitoring.html
   262       11 m1 garand ammunition -> /garand/m1-garand-assembly/ammunition.html
   263       11 m1 garand -> /garand/m1-garand-assembly/
   264       11 ip configuration linux -> /tcpip/commands.html
   265       11 history of information security -> /security/history/
   266       11 hiking hadrian's wall -> /travel/uk/hadrians-wall/
   267       11 french toilet -> /toilet/france.html
   268       11 foreign toilets -> /toilet/
   269       11 dover tunnels -> /travel/uk/dover/
   270       11 convert pal to ntsc dvd -> /technical/pal-to-ntsc.html
   271       11 computer forensic tools free -> /security/security-forensics.html
   272       11 cisco catalyst 2900 xl -> /tcpip/switch-programming.html
   273       11 cisco 2900 -> /tcpip/switch-programming.html
   274       11 build kernel from source -> /unix/linux-kernel.html
   275       11 brecourt manor normandy -> /travel/france/normandy/brecourt-manor.html
   276       11 bob cromwell -> /
   277       11 authentication tools -> /security/security-authentication.html
   278       11 african toilets -> /toilet/north-africa.html
   279       11 55 central park west ghostbusters -> /travel/usa/ghostbusters/
   280       10 zepp antenna calculator -> /radio/j-poles.html
   281       10 unix display ip -> /tcpip/commands.html
   282       10 turkish verb conjugation -> /turkish/verbs.html
   283       10 trains in turkey -> /travel/turkey/trains/
   284       10 tcp/ip -> /tcpip/
   285       10 tcp ip commands -> /tcpip/commands.html
   286       10 stupid signs -> /fun/strange-signs.html
   287       10 squatting toilet platform -> /toilet/install.html
   288       10 sniff wireless lan -> /security/monitoring.html
   289       10 removing bluing -> /garand/debluing/
   290       10 remove blueing -> /garand/debluing/
   291       10 pki tools -> /security/security-pki.html
   292       10 pearl's place tobago -> /travel/trinidad/
   293       10 m1 garand manual pdf -> /garand/m1-garand-assembly/manuals.html
   294       10 lan sniffing -> /security/monitoring.html
   295       10 italian toilets -> /toilet/italy.html
   296       10 ip information linux -> /tcpip/commands.html
   297       10 ic229h -> /radio/ic229.html
   298       10 ic-229h -> /radio/ic229.html
   299       10 how to parkerize metal -> /garand/parkerizing/
   300       10 how to brew mead -> /brewing/
   301       10 hotel medicis paris -> /travel/france/jim-morrison-paris.html
   302       10 ghostbusters columbia university -> /travel/usa/ghostbusters/
   303       10 configure catalyst 2900 xl -> /tcpip/switch-programming.html
   304       10 config ip linux -> /tcpip/commands.html
   305       10 bluing removal -> /garand/debluing/
   306       10 bidet -> /toilet/bidet.html
   307       10 255.255.255.254 -> /tcpip/

Unix is powerful, the Internet is strange.

Where next?

How to enable compression with mod_gzip using the modified Apache web server in OpenBSD.

How to create and install keys and certificates for a secure Apache web server

How to password-protect Apache web pages

Other Unix Tips & Tricks

My Unix/Linux page

My computer security page

Click here to inquire about advertising on this or any page on this site.
Home Unix/Linux Networking Cybersecurity Travel Technical Radio Site Map Contact


Use /bin/vi! Manipulate images with ImageMagick! Hosted on OpenBSD
Hosted on Apache This site is viewable with any browser Valid XHTML 1.0! Valid CSS!
© Bob Cromwell Feb 2012. Created with /bin/vi and ImageMagick, hosted on OpenBSD with Apache.    Root password available here, privacy policy here.