synscan implements a TCP syn scanner on top of pcap.
It's more complicated than arpscan, since it has to handle sending packets
outside the local network, requiring some routing and ARP work.
Since this is just an example program, it aims for simplicity over
performance. It doesn't handle sending packets very quickly, it scans IPs
serially instead of in parallel, and uses gopacket.Packet instead of
gopacket.DecodingLayerParser for packet processing. We also make use of very
simple timeout logic with time.Since.
Making it blazingly fast is left as an exercise to the reader.