This is part of the Semicolon&Sons Code Diary - consisting of lessons learned on the job. You're in the networking category.
Last Updated: 2024-11-23
I wanted to carry out a simple challenge on my home network: run a server on my
laptop (localhost:3000
) and then visit this from my mobile phone (on the same
WIFI network and then from an external network)
Preview:
Part 1 (internal network): With my laptop firewall opened for the Ruby server port, this was as
easy as finding my laptop's exact IP address in the network and typing it into
my phone's browser (i.e., at the time: 192.168.2.107:3000
). The main gotcha
was making sure I was on the same WIFI network (and not letting my phone switch
to the mobile data network!)
Part 2 (external network): This required mapping an external port in my router to the static IP address server/port in my network.
sudo
privileges to access)The private IP address is what your machine is known as within your network (but not over the wider internet)
$ ifconfig
Then browse for likely candidates. Probably under en0
=> en0: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 1500
ether dc:a9:04:72:0b:8a
inet 192.168.2.107
If you are behind a router, then your computer will not know about its public IP
address since the router does a network address translation (NAT). Instead you should ask some
website what your public IP address is using curl
and extract the information
you need from it. Here is one such service:
$ curl ipecho.net/plain
$ nmap localhost
Starting Nmap 7.80 ( https://nmap.org ) at 2019-08-29 04:45 CEST
Nmap scan report for localhost (127.0.0.1)
Host is up (0.00055s latency).
Other addresses for localhost (not scanned): ::1
Not shown: 970 closed ports, 26 filtered ports
PORT STATE SERVICE
3000/tcp open ppp
5432/tcp open postgresql
9000/tcp open cslistener
9200/tcp open wap-wsp
When I shut down my rails server on port 3000, that entry goes from nmap
$ ifconfig
Then find the ether
key for your connection
en0: ....
ether cd:a2:01:51:0b:8a
My mac address is cd:a2:01:51:0b:8a
First set up my computer to have a static private IP within the network. Its address should not be dynamically assigned with DCHP (since a moving target would be too hard to deal with). As such, I would tell my router that mac address should forever be associated with a private IP address, e.g. '192.168.2.107',
Go into the router and go to "Port Forwarding"
Enter in my public ip address (as seen on the computer with the Rails server running)
Now map an external port to the internal one (3000). These can be the same or different numbers.