Saturday, July 24, 2010

How to: 2 (or more) Router Networking

There are a lot of great places online to read about subnets and routing. It's worth a quick read, and the information is consistently repeated everywhere. There isn't however a whole lot on how to set up a network with two routers or on using subnets.

Here is what I figured out after a long night of toying with things:
  • If you want to use two routers in a network, just connect the WAN port of the second router into a LAN port on the first one.
Simple right? I can't believe it took me so long to figure this simple concept out. But before you go just plugging routers into one another, you have to take some initial steps to ensure they play nicely. Here they are:
  • Make sure your routers are using different subnets/assigning different (unique) IP ranges.
    (Mine use and with subnet mask
  • Make sure you understand subnet masking to some small extent.
  • Draw up how you want your network to behave/look before you get started. This is often a good idea for larger more complex networks.
  • Make sure there is no contention between wireless and other network settings. (i.e. turn off or reconfigure wireless to be different across the hardware.)
  • Assign all secondary hardware with static IP's in the range of the primary. (Obviously don't use an IP already in use like
Once you've set up two routers to map hosts on two different subnets, it's time to link them together. Plug the WAN port of your secondary router (Mine was subnet 0) into a LAN port of your primary (subnet 1). The network on your secondary router should now be able to reach the internet and also network hosts on your primary router.

However, if you want the hosts on subnet 1 to see subnet 0 then you need to set up a small and simple routing rule on the primary router. The routing rule looks something like this:

DestinationSubnet MaskGateway

Where is the external (static) IP of subnet 0, the secondary router. The internal IP of subnet 0 is still And with this new routing rule you can now access it from the primary network.

Happy Routing!

Monday, May 17, 2010

JavaScript Ping

After doing mountains of research and testing on the subject, I've come to the unfortunate conclusion that a Client-Side JavaScript Ping program is impossible to do.

I thought that maybe I'd be able to monkey around in some clever way of using page-loads and time measuring, but it doesn't work. Unfortunately the event handler for onLoad doesn't work exactly how you would expect thus the getTime() function doesn't actually time the page load.

I thought I could work around this by opening new windows, and time it with the window.onLoad event, but this didn't work out either.

Curse you JavaScript! This is something that would be very beneficial for better web software! I suppose I may be able to implement this in VBScript instead. There will be news if I have any success.

Sunday, May 2, 2010

DNS Issue

I recently solved a problem with my ISP's DNS lookup. Google Chrome was waiting forever on loading pages that weren't already DNS cached. I could tell this because they spent a long time on the "Resolving Host" phase, then they would report back with "Page Unavailable".

Further diagnosis included using cmd tools. I used `nslookup` in order to force responses from my local ISP's DNS. While the responses didn't usually take more than a few seconds, there was definitely a problem somewhere. I then changed my DNS in windows to use the Google Public DNS. This seems to have solved my issue.

While I'm aware that DNS lookup on the Google servers would probably take slightly longer than my ISP's, Google doesn't have the problem of timing out on ever uncached request. I've been using Google Public DNS for 4 days now, and everything is just awesome.

Google Public DNS Servers are:

Friday, February 12, 2010

Removing Old Windows Boot on Windows 7

Something that started to get on my nerves was the fact that every time I booted my machine, it would ask me if I wanted to boot my older version of windows. I did some searching and came up with a quick and painless solution.

In Windows 7 you have to use a configuration tool for the boot menu. You can no longer just edit the boot.ini file. To do this you need to run "cmd" as administrator.

Use bcdedit /enum to look at the boot list.
C:\Windows\system32>bcdedit /enum

Windows Boot Manager
identifier {bootmgr}
device partition=C:
description Windows Boot Manager
locale en-US
inherit {globalsettings}
default {current}
resumeobject {7a4f5321-daf0-11de-a4b9-b9516570860e}
displayorder {current}
toolsdisplayorder {memdiag}
timeout 30

Windows Boot Loader
identifier {current}
device partition=C:
path \Windows\system32\winload.exe
description Windows 7
locale en-US
inherit {bootloadersettings}
recoverysequence {7a4f5323-daf0-11de-a4b9-b9516570860e}
recoveryenabled Yes
osdevice partition=C:
systemroot \Windows
resumeobject {7a4f5321-daf0-11de-a4b9-b9516570860e}
nx OptIn
numproc 2
usefirmwarepcisettings No
Warning! You can seriously mess up your system if you don't know what you are doing here. Do NOT delete {current} or {bootmgr}

Use the identifier property to delete unwanted boot options. In my case I had one that was {ntldr} for my old windows. So I used:

bcdedit /f /delete {ntldr}

Thats all there is to it! Happy booting.

Wednesday, February 10, 2010

How To: Timed Shutdown

I've decided I need to reduce my electrical bill, but I often like to have my computer on while I'm trying to sleep. After some researching I figured out how to write a batch script to shutdown my computer after some time. Here is how:

When Windows shuts down it actually executes a program to do all the "dirty" work. Turns out this program is called "shutdown" and is accessible through the run box and in command prompt. If you open a command prompt window and type "shutdown" the following help text is displayed:
Usage: shutdown [/i | /l | /s | /r | /g | /a | /p | /h | /e] [/f]
[/m \\computer][/t xxx][/d [p|u:]xx:yy [/c "comment"]]

No args Display help. This is the same as typing /?.
/? Display help. This is the same as not typing any options.
/i Display the graphical user interface (GUI).
This must be the first option.
/l Log off. This cannot be used with /m or /d options.
/s Shutdown the computer.
/r Shutdown and restart the computer.
/g Shutdown and restart the computer. After the system is
rebooted, restart any registered applications.
/a Abort a system shutdown.
This can only be used during the time-out period.
/p Turn off the local computer with no time-out or warning.
Can be used with /d and /f options.
/h Hibernate the local computer.
Can be used with the /f option.
/e Document the reason for an unexpected shutdown of a computer.
/m \\computer Specify the target computer.
/t xxx Set the time-out period before shutdown to xxx seconds.
The valid range is 0-315360000 (10 years), with a default of 30.
If the timeout period is greater than 0, the /f parameter is
/c "comment" Comment on the reason for the restart or shutdown.
Maximum of 512 characters allowed.
/f Force running applications to close without forewarning users.
The /f parameter is implied when a value greater than 0 is
specified for the /t parameter.
/d [p|u:]xx:yy Provide the reason for the restart or shutdown.
p indicates that the restart or shutdown is planned.
u indicates that the reason is user defined.
If neither p nor u is specified the restart or shutdown is
xx is the major reason number (positive integer less than 256).
yy is the minor reason number (positive integer less than 65536).
The important thing to take from this is that we can use /t and an alloted time in seconds to schedule a shutdown. Using this switch, I wrote a simple little batch script (called shutdown.bat) that now resides on my desktop. Here is what it looks like:

@echo off
echo Scheduling shutdown in one hour.
shutdown.exe /s /t 3600

All I need to do is double click the icon when I want to turn off my computer in the next hour. You could modify this line to suit your needs with a longer time in seconds, or maybe /h for hibernate instead of /s for shutdown.

Feel free to email me with questions.