All posts by Krishen Greenwell

Scanning Mac WiFi networks from the command line

Thanks to osxdaily.com for this tip.

First, do this (one-time operation):

$ sudo ln -s /System/Library/PrivateFrameworks/Apple80211.framework/Versions/Current/Resources/airport /usr/local/bin/airport

Then, anytime you want to query the nearby Wi-Fi networks, make sure Wi-Fi is enabled, and do this:

$ airport -s

This will create output that looks like this (B/SSIDs changed to protect the innocent 🙂 ):

SSID BSSID             RSSI CHANNEL HT CC SECURITY (auth/unicast/group)
XXXX 1a:2b:3c:4d:5e:6f -66 149 Y US WPA2(PSK/AES/AES)
XXXX 1a:2b:3c:4d:5e:6f -68 6 Y -- WPA2(PSK/AES/AES)
XXXX 1a:2b:3c:4d:5e:6f -43 6 Y US WPA2(PSK/AES/AES)
XXXX 1a:2b:3c:4d:5e:6f -65 6 Y -- WPA2(PSK/AES/AES)
XXXX 1a:2b:3c:4d:5e:6f -84 1 Y US WPA2(PSK/AES/AES)
XXXX 1a:2b:3c:4d:5e:6f -70 1 Y US WPA2(PSK/AES/AES)
XXXX 1a:2b:3c:4d:5e:6f -58 1 Y US WPA2(PSK/AES/AES)
XXXX 1a:2b:3c:4d:5e:6f -86 11 Y -- WPA(PSK/AES/AES) WPA2(PSK/AES/AES)
XXXX 1a:2b:3c:4d:5e:6f -85 11,-1 Y US WPA2(PSK/AES/AES)
XXXX 1a:2b:3c:4d:5e:6f -58 11 Y US WPA2(PSK/AES/AES)

Find that program running on that port

macOS (tested on 10.11.6):
sudo lsof -i :80
…where ’80’ is the port you’re curious about (substitute any value)

Thanks to Databasically.

Windows (tested on 10 Pro version 1709):
netstat -ano
…this will produce a list of ports in use and the PIDs using them)

Thanks to @RickVanover.

Fedora 20
netstat -npl | grep 8013
…this will find the name of the process running on port 8013. Thanks to Vivek Gite at nixCraft.

Segfault error

Ever end up with messages like these in your Linux system’s system log? (/var/log/messages or journalctl or whatever system log system you’re using)?

Apr 1 08:09:27 machinename kernel: ProcessNameThatCrashed[22041]: segfault at 00000000e5c5e000 rip 00000000081473d0 rsp 00000000e5c5aa30 error 4

Ever wonder what that error number means? Well, Raphael Geissert over at Raphael’s blog has a handy little lookup tool that I made use of today.

In my case, error 4 means “The cause was a user-mode read resulting in no page being found.”

As commenter “LittleAncientForestKami” explains, maybe not rocket science, but since I had no idea how to figure this out, really appreciated.

Update:
So, I thought I’d figure out what “rip” and “rsp” meant. “rsp” is probably a little hard to use, but “rip” is the address of the instruction where the crash occured, and you can figure out what function it points to using this technique described by StackOverflow user qrtt1:

  1. Dump the addresses of the crashing application by saying “objdump -d ProcessNameThatCrashed | less” (where “ProcessNameThatCrashed” is the name of the crashing app)
  2. Search for the address in ‘less’ by typing “/”, then entering the address name (in this case, the address I’m searching for is ‘81473d0’).

A few (or maybe many) lines up from the line matching the address in question, you should see the name of the function that crashed:

0081473c4 <fourBytesNetworkToHost>:
81473c4: 55 push %ebp
81473c5: 89 e5 mov %esp,%ebp
81473c7: 83 ec 18 sub $0x18,%esp
81473ca: 8d 55 fc lea 0xfffffffc(%ebp),%edx
81473cd: 8b 45 08 mov 0x8(%ebp),%eax
81473d0: 8b 00 mov (%eax),%eax

In this case ‘fourBytesNetworkToHost’ is the name of the function that crashed.

Installing Boost on macOS High Sierra (10.13.2)

Assuming you have Homebrew installed already:

  1. Launch Terminal
  2. brew install boost” (without the quotes). Notice errors. Try updating brew by doing a ‘brew update’. Failures.  Notice by looking at /Users/<userid>/Library/Logs/Homebrew/boost/01.bootstrap.sh that “brew” is at version 0.95 on my machine. Research brew and see it’s on version 1.4.0. Reinstall Brew as though it’s never been installed (even though it is). Notice install says success despite printing a couple of errors during the install. Use “sudo rm /usr/local/share/man/man1/brew.1” and “sudo rm /usr/local/share/doc/homebrew” and re-install brew: /usr/bin/ruby -e “$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)” to fix.
  3. Retry “brew install boost”.  Success! And brew has installed the latest Boost (1.66.0); under the old version of brew it was trying to install version Boost 1.59.0.

How I installed IPython on macOS 10.13.1 High Sierra

So I installed IPython today. It was a bit of an adventure, so thought I’d document it here, in case it helps anyone else (including my future self, heh):

  1. Installed Python 3.6 (the default, 2.7, included with macOS, isn’t new enough).  This puts the “python3” executable on your machine, which you can invoke similarly to “python” (which will invoke the default OS-supplied Python, probably 2.7).
  2. Got ‘pip‘. Note this was a convoluted process that involved copying some text from the pip website, pasting it into a text file, then executing that text file from python3 like so: ‘python3 get-pip.py’ (without the quotes).  This yielded the ‘pip3.6’ executable, located here: /usr/local/bin/pip3.6
  3. Used the ‘pip3.6’ executable to download ‘ipython’: /usr/local/bin/pip3.6 install ipython
  4. Noticed that IPython looked like it installed correctly, but ‘ipython’ didn’t run from the command line immediately after that, and the installation path wasn’t noted anywhere in the installation output.  Turns out, IPython added its installation location to my PATH via my .bash_profile file, but didn’t tell me. I reloaded my .bash_profile like this, and all was good: source ~/.bash_profile
  5. Now I’ve got IPython! Invoke like this from the command line like this: ‘ipython’. Output looks like this:
    • Macintodffeb798:local me$ ipython
      Python 3.6.3 (v3.6.3:2c5fed86e0, Oct 3 2017, 00:32:08)
      Type ‘copyright’, ‘credits’ or ‘license’ for more information
      IPython 6.2.1 — An enhanced Interactive Python. Type ‘?’ for help.In [1]: