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.

    Source Files