A Simple Log Cleaner for Nginx and Apache
referer_log
How to filter the Nginx and Apache referrer logs and see the search strings being used to find your pages.
Nginx and Apache Logs
Web servers can maintain logs of "referrers" if you ask them to.
When a client loads a page, the server can record 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
.
Yes, I know that's spelled funny, that's simply 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:
First,
/var/www/logs/access_log
gets a new line, looking
something like this:
1.2.3.4 - - [08/Jan/25:11:01:23 -0500] "GET /somepage.html HTTP/1.1" 200 7340
Second,
/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 -> /cybersecurity/monitoring.html
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 -> /cybersecurity/monitoring.html
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= -> /networking/
The Solution
What we want to do to each line is:
-
Except for ASCII code
%25
, which is a literal%
, replace every%xx
ASCII code with the corresponding character. -
Now replace every
%25
with a literal%
. -
Delete all characters up to the first instance
of any one of
?q=
or&q=
or?p=
or&p=
. -
If there are any remaining
variable=value
pairs, delete them. That is, delete everything from the next&
up to the string->
. -
Replace every
+
character with a blank space.
Amazon
ASIN: 0596003307
Amazon
ASIN: 1565922255
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 -> /open-source/linux-kernel.html 3 327 toilets of the world -> /toilet/ 4 252 build kernel -> /open-source/linux-kernel.html 5 176 confederation of the lusitanian union -> /cybersecurity/netusers/Index/pt 6 158 how to build linux kernel -> /open-source/linux-kernel.html 7 140 toilets -> /toilet/ 8 139 linux kernel build -> /open-source/linux-kernel.html 9 134 latex cyrillic -> /russian/latex.html 10 123 turkish verbs -> /turkish/verbs.html 11 120 building linux kernel -> /open-source/linux-kernel.html 12 99 adsense xhtml -> /technical/google-adsense-and-xhtml.html 13 93 net.ipv4.tcp_max_syn_backlog -> /cybersecurity/stack-hardening.html 14 89 sniffing tools -> /cybersecurity/monitoring.html 15 85 how to build kernel -> /open-source/linux-kernel.html 16 84 make kernel -> /open-source/linux-kernel.html 17 84 histogram equalization -> /3d/histogram/ 18 81 network sniffing tools -> /cybersecurity/monitoring.html 19 80 linux build kernel -> /open-source/linux-kernel.html 20 78 net.ipv4.conf.all.rp_filter -> /cybersecurity/stack-hardening.html 21 78 kernel build -> /open-source/linux-kernel.html 22 78 confederation lusitanian union -> /cybersecurity/netusers/Index/pt 23 74 cr0 net code network -> /cybersecurity/monitoring.html 24 72 toilets around the world -> /toilet/ 25 69 oscilloscope probes -> /radio/probes.html 26 67 oscilloscope probe -> /radio/probes.html 27 66 cyrillic latex -> /russian/latex.html 28 64 european toilets -> /toilet/see.html 29 62 stainless steel toilet -> /toilet/stainless.html 30 62 pictures of toilets -> /toilet/ 31 59 unix ipconfig -> /networking/commands.html 32 59 toilet -> /toilet/ 33 57 computer network security -> /cybersecurity/ 34 56 turkish grammar -> /turkish/background.html 35 56 how to build a linux kernel -> /open-source/linux-kernel.html 36 56 confutatis maledictis -> /fun/latin.html 37 55 linux ip config -> /networking/commands.html 38 54 network sniffing -> /cybersecurity/monitoring.html 39 53 movie concepts -> /fun/brilliant-movie-ideas/ 40 53 lan monitoring -> /cybersecurity/monitoring.html 41 51 what is ipsec -> /networking/what-is-ipsec.html 42 51 ardennes forest -> /travel/belgium/bastogne-ardennes/ 43 50 how linux boots -> /open-source/linux-boot.html 44 49 how to build a kernel -> /open-source/linux-kernel.html 45 48 compile linux kernel -> /open-source/linux-kernel.html 46 47 sniffing tool -> /cybersecurity/monitoring.html 47 46 roman toilets -> /toilet/roman-britannia.html 48 46 human toilets -> /toilet/nonhuman.html 49 44 tcp_strong_iss -> /cybersecurity/stack-hardening.html 50 43 how to make a kernel -> /open-source/linux-kernel.html 51 43 how to compile linux kernel -> /open-source/linux-kernel.html 52 42 steampunk projects -> /steampunk/ 53 41 ipconfig commands -> /networking/commands.html 54 40 kernel make -> /open-source/linux-kernel.html 55 40 ghostbusters headquarters -> /travel/usa/ghostbusters/ 56 40 cncgroup hebei province network -> /cybersecurity/ssh-attack-study.html 57 39 verify digital signature -> /cybersecurity/verify-digital-signature.html 58 38 contrast enhancement -> /3d/histogram/ 59 38 ardennes forest map -> /travel/belgium/bastogne-ardennes/ 60 37 unix ip config -> /networking/commands.html 61 37 turkish grammar online -> /turkish/background.html 62 35 how to use ftp in linux -> /open-source/ftp-howto.html 63 34 turkish suffixes -> /turkish/turkish-suffixes.html 64 34 sendmail ssl -> /open-source/sendmail-ssl.html 65 34 protocol header -> /networking/protocols.html 66 34 learn turkish grammar -> /turkish/ 67 34 ipconfig linux -> /networking/commands.html 68 33 wireless sniffing windows -> /cybersecurity/monitoring.html 69 33 unix ip commands -> /networking/commands.html 70 33 cisco catalyst 2900 -> /networking/switch-programming.html 71 32 www.alqaida.com -> /cybersecurity/netusers/Index/aq 72 32 wan link -> /networking/wan-specs.html 73 32 oscilloscope probe circuit -> /radio/probes.html 74 31 turkish pronouns -> /turkish/nouns.html 75 31 linux ip config command -> /networking/commands.html 76 31 computer system security -> /cybersecurity/ 77 31 build kernel linux -> /open-source/linux-kernel.html 78 30 world toilets -> /toilet/ 79 30 turkish grammar -> /turkish/nouns.html 80 30 stainless steel toilets -> /toilet/stainless.html 81 30 build linux -> /open-source/linux-kernel.html 82 30 7 deadly sins spear street google secret service -> /cybersecurity/cyberwar/ 83 29 linux kernel compile -> /open-source/linux-kernel.html 84 29 how routing works -> /networking/routing.html 85 28 jim morrison paris -> /travel/france/jim-morrison-paris.html 86 28 http://www.cr0.net:8040/code/network/ -> /cybersecurity/monitoring.html 87 28 dover tunnels -> /travel/uk/dover/ 88 28 building kernel -> /linux/linux-kernel.html 89 27 wan links -> /networking/wan-specs.html 90 27 turkish grammar -> /turkish/verbs.html 91 27 ipconfig unix -> /networking/commands.html 92 27 ghostbusters headquarters building -> /travel/usa/ghostbusters/ 93 27 ghostbusters -> /travel/usa/ghostbusters/ 94 26 unix commands ip -> /networking/commands.html 95 26 linux ip configuration command -> /networking/commands.html 96 26 jim morrison in paris -> /travel/france/jim-morrison-paris.html 97 26 how to build the linux kernel -> /linux/linux-kernel.html 98 26 free computer forensic tools -> /cybersecurity/forensics.html 99 26 chimera turkey -> /travel/turkey/olimpos/ 100 26 bastogne battle of the bulge -> /travel/belgium/bastogne-ardennes/ 101 26 adaptive histogram equalization -> /3d/histogram/ 102 25 train toilets -> /toilet/train.html 103 25 tektronix 2445a -> /radio/tek2445a.html 104 25 lan monitoring tool -> /cybersecurity/monitoring.html 105 25 intrusion detection tools -> /cybersecurity/intrusion.html 106 25 eastern toilets -> /toilet/ 107 25 confutatis maledictis flammis acribus addictis -> /fun/latin.html 108 25 asian toilets -> /toilet/ 109 24 turkish basics -> /turkish/ 110 24 jim morrison -> /toilet/france.html 111 24 highest peak in scotland -> /travel/uk/ben-nevis/ 112 23 lan monitoring tools -> /cybersecurity/monitoring.html 113 23 basic turkish grammar -> /turkish/ 114 23 ancient toilets -> /toilet/ 115 22 network sniffing tool -> /cybersecurity/monitoring.html 116 22 building a linux kernel -> /linux/linux-kernel.html 117 22 british toilets -> /toilet/britain.html 118 21 verifying digital signature -> /cybersecurity/verify-digital-signature.html 119 21 turkish grammar rules -> /turkish/ 120 21 toilets of the world -> /toilet/middle-east.html 121 21 small hf antenna -> /radio/hf-short-dipoles.html 122 21 oliver cromwell -> /oliver-cromwell/ 123 21 net.inet.ip.redirect -> /cybersecurity/stack-hardening.html 124 21 linux ip configuration -> /networking/commands.html 125 21 ip config linux -> /networking/commands.html 126 21 image contrast enhancement -> /3d/histogram/ 127 20 turkish language grammar -> /turkish/background.html 128 20 ssh access control -> /linux/ssh.html 129 20 ipconfig in unix -> /networking/commands.html 130 20 how nat works -> /networking/nat.html 131 20 eastern toilets -> /toilet/see.html 132 20 build a linux kernel -> /linux/linux-kernel.html 133 19 make linux kernel -> /linux/linux-kernel.html 134 19 linux tcp ip commands -> /networking/commands.html 135 19 how to make kernel -> /linux/linux-kernel.html 136 19 hieropolis -> /travel/turkey/pamukkale/ 137 18 unix display ip address -> /networking/commands.html 138 18 rc.sysinit in linux -> /linux/linux-boot.html 139 18 jenny mccarthy -> /fun/brilliant-movie-ideas/news.html 140 18 hotel de medicis paris -> /travel/france/jim-morrison-paris.html 141 18 futuristic toilets -> /toilet/hightech.html 142 18 avebury uk -> /travel/uk/avebury/ 143 18 asian toilets -> /toilet/middle-east.html 144 17 unix show ip address -> /networking/commands.html 145 17 unix ip command -> /networking/commands.html 146 17 turkish vowel harmony -> /turkish/orthography.html 147 17 toilet squatting platform -> /toilet/install.html 148 17 stainless toilets -> /toilet/stainless.html 149 17 packet sniffing tools -> /cybersecurity/monitoring.html 150 17 linux kernel build howto -> /linux/linux-kernel.html 151 17 ipconfig in linux -> /networking/commands.html 152 17 ipconfig for linux -> /networking/commands.html 153 17 ip config unix -> /networking/commands.html 154 17 grammar turkish -> /turkish/ 155 17 build oscilloscope probe -> /radio/probes.html 156 16 network monitoring tools -> /cybersecurity/monitoring.html 157 16 french toilets -> /toilet/links.html 158 16 deaths on ben nevis -> /travel/uk/ben-nevis/ 159 16 cyrillic in latex -> /russian/latex.html 160 16 cisco 3550 -> /networking/switch-programming.html 161 16 ben nevis deaths -> /travel/uk/ben-nevis/ 162 16 arlington hall -> /travel/usa/us-wash-ah.html 163 15 wlan sniffing -> /cybersecurity/monitoring.html 164 15 toilet of the world -> /toilet/ 165 15 strait gallipoli peninsula -> /travel/turkey/gallipoli/ 166 15 make oscilloscope probe -> /radio/probes.html 167 15 linux network sniffing tools -> /cybersecurity/monitoring.html 168 15 linux build -> /linux/linux-kernel.html 169 15 how to verify digital signature -> /cybersecurity/verify-digital-signature.html 170 15 how to compile kernel -> /linux/linux-kernel.html 171 15 hardening openbsd -> /cybersecurity/root-password.html 172 15 hardening linux -> /cybersecurity/root-password.html 173 15 guangxi filterui:photo-photo -> /toilet/china.html 174 15 ghostbusters locations -> /travel/usa/ghostbusters/ 175 15 free computer forensics tools -> /cybersecurity/forensics.html 176 15 chinese toilets -> /toilet/ 177 15 build a kernel -> /linux/linux-kernel.html 178 14 toilet world -> /toilet/ 179 14 tektronix 2445 -> /radio/tek2445a.html 180 14 qemu linux usb -> /linux/qemu-unix.html 181 14 puppy linux qemu -> /linux/qemu-unix.html 182 14 programming cisco switches -> /networking/switch-programming.html 183 14 program cisco switch -> /networking/switch-programming.html 184 14 network security -> /cybersecurity/ 185 14 linux kernel make -> /linux/linux-kernel.html 186 14 linux kernel building -> /linux/linux-kernel.html 187 14 linux ip information -> /networking/commands.html 188 14 linux hardening -> /cybersecurity/root-password.html 189 14 international toilets -> /toilet/ 190 14 how to build linux -> /linux/linux-kernel.html 191 14 greyhound bus toilet -> /toilet/bus.html 192 14 catalyst 2900 -> /networking/switch-programming.html 193 14 building linux -> /linux/linux-kernel.html 194 14 ben nevis trail -> /travel/uk/ben-nevis/ 195 13 zepp antenna -> /radio/j-poles.html 196 13 unix tcp ip commands -> /networking/commands.html 197 13 unix ip configuration -> /networking/commands.html 198 13 tektronix oscilloscope -> /radio/tek2445a.html 199 13 qemu puppy -> /linux/qemu-unix.html 200 13 network security system -> /cybersecurity/ 201 13 learn turkish grammar -> /turkish/background.html 202 13 kernel build howto -> /linux/linux-kernel.html 203 13 kata ton daimona eautou -> /travel/france/jim-morrison-paris.html 204 13 ip unix -> /networking/commands.html 205 13 interesting toilets -> /toilet/ 206 13 how to program a cisco switch -> /networking/switch-programming.html 207 13 egyptian toilets -> /toilet/ 208 13 building a kernel -> /linux/linux-kernel.html 209 13 brecourt manor -> /travel/france/normandy/brecourt-manor.html 210 12 would you like to enable as a cluster command switch -> /networking/switch-programming.html 211 12 unix firewall -> /cybersecurity/firewall.html 212 12 unix command ipconfig -> /networking/commands.html 213 12 toilets of the world -> /toilet/hightech.html 214 12 toilets in the world -> /toilet/ 215 12 sniff tool -> /cybersecurity/monitoring.html 216 12 rose valley turkey -> /travel/turkey/goreme/ 217 12 openbsd hardening -> /cybersecurity/root-password.html 218 12 net.ipv4.conf.all.rp_filter=0 -> /cybersecurity/stack-hardening.html 219 12 making a kernel -> /linux/linux-kernel.html 220 12 list of suffixes -> /turkish/turkish-suffixes.html 221 12 linux ipconfig -> /networking/commands.html 222 12 linux ip info -> /networking/commands.html 223 12 kata ton jim morrison -> /travel/france/jim-morrison-paris.html 224 12 ip configuration in linux -> /networking/commands.html 225 12 ip config in linux -> /networking/commands.html 226 12 howto build linux kernel -> /linux/linux-kernel.html 227 12 how to calculate subnet number -> /networking/ip-addresses-and-subnets.html 228 12 firewall tools -> /cybersecurity/firewall.html 229 12 confutatis maledictis, flammis acribus addictis -> /fun/latin.html 230 12 calculate normal -> /3d/normals.html 231 12 255.254.0.0 -> /networking/ 232 11 windows wireless sniffing -> /cybersecurity/monitoring.html 233 11 turkish language basics -> /turkish/background.html 234 11 toilet signage -> /toilet/signage.html 235 11 tcp/ip commands -> /networking/commands.html 236 11 tcp ip unix -> /networking/commands.html 237 11 sit vis tecum -> /fun/latin.html 238 11 russian grammar table -> /russian/grammar.html 239 11 rtsp internet radio -> /radio/internet-radio.html 240 11 network security audit tools -> /cybersecurity/netaudit.html 241 11 monitoring lan -> /cybersecurity/monitoring.html 242 11 ip configuration linux -> /networking/commands.html 243 11 history of information security -> /cybersecurity/history/ 244 11 hiking hadrian's wall -> /travel/uk/hadrians-wall/ 245 11 french toilet -> /toilet/france.html 246 11 foreign toilets -> /toilet/ 247 11 dover tunnels -> /travel/uk/dover/ 248 11 convert pal to ntsc dvd -> /technical/pal-to-ntsc.html 249 11 computer forensic tools free -> /cybersecurity/forensics.html 250 11 cisco catalyst 2900 xl -> /networking/switch-programming.html 251 11 cisco 2900 -> /networking/switch-programming.html 252 11 build kernel from source -> /linux/linux-kernel.html 253 11 brecourt manor normandy -> /travel/france/normandy/brecourt-manor.html 254 11 bob cromwell -> / 255 11 authentication tools -> /cybersecurity/authentication.html 256 11 african toilets -> /toilet/egypt.html 257 11 55 central park west ghostbusters -> /travel/usa/ghostbusters/ 258 10 zepp antenna calculator -> /radio/j-poles.html 259 10 unix display ip -> /networking/commands.html 260 10 turkish verb conjugation -> /turkish/verbs.html 261 10 trains in turkey -> /travel/turkey/trains/ 262 10 tcp/ip -> /networking/ 263 10 tcp ip commands -> /networking/commands.html 264 10 stupid signs -> /fun/strange-signs.html 265 10 squatting toilet platform -> /toilet/install.html 266 10 sniff wireless lan -> /cybersecurity/monitoring.html 267 10 pki tools -> /cybersecurity/ssl-tls.html 268 10 pearl's place tobago -> /travel/trinidad/ 269 10 lan sniffing -> /cybersecurity/monitoring.html 270 10 italian toilets -> /toilet/italy.html 271 10 ip information linux -> /networking/commands.html 272 10 ic229h -> /radio/ic229.html 273 10 ic-229h -> /radio/ic229.html 274 10 how to brew mead -> /brewing/ 275 10 hotel medicis paris -> /travel/france/jim-morrison-paris.html 276 10 ghostbusters columbia university -> /travel/usa/ghostbusters/ 277 10 configure catalyst 2900 xl -> /networking/switch-programming.html 278 10 config ip linux -> /networking/commands.html 279 10 bidet -> /toilet/bidet.html 280 10 255.255.255.254 -> /networking/
Unix is powerful, the Internet is strange.