Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages

  
 
  

home | help
ARP-SCAN(1)		     General Commands Manual		     ARP-SCAN(1)

NAME
     arp-scan - Send ARP requests to target hosts and display responses

SYNOPSIS
     arp-scan [options] [hosts...]

     Target  hosts  must  be  specified on the command line unless the --file or
     --localnet option is used.

     Targets can be IPv4 addresses or hostnames. You can also use CIDR	notation
     (10.0.0.0/24)	(network     and     broadcast	   included),	  ranges
     (10.0.0.1-10.0.0.10), and network:mask (10.0.0.0:255.255.255.0).

DESCRIPTION
     arp-scan sends ARP request packets to the specified hosts and displays  any
     responses	received.  The network interface can be specified with the --in-
     terface option. If no interface is specified, arp-scan will pick the lowest
     numbered, configured up interface (excluding loopback).

     arp-scan uses raw sockets, which requires privileges on some systems:

     Linux with POSIX.1e capabilities support using libcap:
	    arp-scan is capabilities aware. It requires CAP_NET_RAW in the  per-
	    mitted  set  and only enables that capability for the required func-
	    tions.   use   setcap   cap_net_raw+p   /path/to/arp-scan	to   add
	    CAP_NET_RAW  to the permitted set of the arp-scan executable.  Capa-
	    bilities support also makes SUID root much	safer  because	arp-scan
	    will  drop all capabilities except CAP_NET_RAW and will not run with
	    full root privileges.

     BSD and macOS:
	    You need read/write access to /dev/bpf*

     Any operating system:
	    Running as root or SUID root will work on any OS but  other  methods
	    are preferable where possible.

     ARP only operates on the local network, and cannot be routed.  Although the
     ARP protocol uses IPv4 addresses, it is not an IP protocol and arp-scan can
     be used on interfaces without an IPv4 address.

     One  ARP  request	is sent for each target. If a host does not respond, the
     request will be re-sent once more. The number of  retries	can  be  changed
     with  the	--retry  option.  Reducing the number of retries will reduce the
     scanning time at the risk of missing some results due to packet loss.

     You can specify the bandwidth that arp-scan will use with	the  --bandwidth
     option.  The  default  is	256000 bits per second. Increasing the bandwidth
     will reduce scanning time, but setting the bandwidth too high may	cause  a
     high broadcast packet rate.  Another way to specify the packet rate is with
     the --interval option.

     The time for a single-pass scan (i.e. with --retry=1) is:

     time = n times i + t + o

     Where n is the number of hosts, i is the interval (given with --interval or
     calculated  from  --bandwidth), t is the timeout (specified with --timeout)
     and o is the overhead time taken to load  the  target  list  and  read  the
     MAC/Vendor  mapping  files.  The overhead is normally negligible (typically
     around 100ms) but can be reduced further by the --quiet option.  For  small
     lists  of	hosts,	the timeout value will dominate, but for large lists the
     packet interval is the most important value.

     Any part of the ARP request may be modified through the use of the --arpXXX
     options as shown in the table below:
     +-----------------------------------------------------+
     |		   ARP Request Packet Options		   |
     +--------+------+----------+--------------------------+
     | Field  | Bits | Option	| Default		   |
     +--------+------+----------+--------------------------+
     | ar$hrd | 16   | --arphrd | 1 (ARPHRD_ETHER)	   |
     | ar$pro | 16   | --arppro | 0x0800		   |
     | ar$hln | 8    | --arphln | 6 (ETH_ALEN)		   |
     | ar$pln | 8    | --arppln | 4 (IPv4)		   |
     | ar$op  | 16   | --arpop	| 1 (ARPOP_REQUEST)	   |
     | ar$sha | 48   | --arpsha | interface h/w address    |
     | ar$spa | 32   | --arpspa | interface IPv4 address   |
     | ar$tha | 48   | --arptha | 00:00:00:00:00:00	   |
     | ar$tpa | 32   | None	| target host IPv4 address |
     +--------+------+----------+--------------------------+

     The most common option is --arpspa, which sets the source IPv4  address  in
     the ARP request, allowing the ARP request to use a different source address
     from  the	interface address. This allows the use of arp-scan on interfaces
     with no IPv4 address.  Note: Setting ar$spa  to  the  target's  IP  address
     causes  some operating systems to report an address clash when they receive
     an ARP request for their own address.

     You can also change the values in the Ethernet frame header as shown below:
     +---------------------------------------------------------+
     |		       Ethernet Header Options		       |
     +----------------+------+-------------+-------------------+
     | Field	      | Bits | Option	   | Default	       |
     +----------------+------+-------------+-------------------+
     | Dest Address   | 48   | --destaddr  | ff:ff:ff:ff:ff:ff |
     | Source Address | 48   | --srcaddr   | interface address |
     | Protocol Type  | 16   | --prototype | 0x0806 (ARP)      |
     +----------------+------+-------------+-------------------+

     The --destaddr option which sets the destination Ethernet	address  is  the
     only one that is commonly used.

     By default, ARP responses are displayed in the following format:
     <IPv4 Address>   <MAC Address>   <Vendor Details>

     Where  IPv4 Address is the IP address of the responding target, MAC Address
     is its link-layer address and Vendor Details are the vendor details decoded
     from the hardware address. The output fields are separated by a single  tab
     character. You can change the output format with the --format option.

     The  responses  are  displayed in the order they are received, which can be
     different from the order the requests were sent because some hosts may  re-
     spond quicker than others.

     The  vendor decoding uses the files ieee-oui.txt and mac-vendor.txt.  ieee-
     oui.txt is generated from the IEEE MA-L (OUI), MA-M, MA-S (OUI36)	and  IAB
     registries.  mac-vendor.txt contains additional MAC to Vendor mappings, and
     can  be  used  to	add custom mappings. get-oui can be used to update ieee-
     oui.txt with the latest data from the IEEE registries.

     All IPv4 hosts should respond to ARP request packets, including hosts  with
     packet  filtering	such  as firewalls. This makes arp-scan a useful tool to
     discover all active IPv4 hosts on the local network.

OPTIONS
     Where an option takes a value, that value is specified as a letter in angle
     brackets. The letter indicates the type of data that is expected:

     <s>    Character string.

     <i>    Decimal integer, or hex if preceeded by 0x e.g. 2048 or 0x800.

     <f>    Floating point decimal number.

     <m>    MAC address, e.g. 01:23:45:67:89:ab or 01-23-45-67-89-ab  (case  in-
	    sensitive)

     <a>    IPv4 address e.g. 10.0.0.1

     <h>    Hex encoded binary data. No leading 0x. (case insensitive).

     <x>    Something else - see option description.

   General Options
     --help or -h
	    Display this usage message and exit.

     --verbose or -v
	    Display  verbose  progress	messages.   Can be used than once to in-
	    crease verbosity. Max=3.

     --version or -V
	    Display program version and exit.  Displays the version, license de-
	    tails, libpcap version, and whether POSIX.1e capability  support  is
	    included.

     --interface=<s> or -I <s>
	    Use  network  interface  <s>.  If this option is not specified, arp-
	    scan will search the system interface list for the lowest  numbered,
	    configured up interface (excluding loopback).

   Host Selection
     --file=<s> or -f <s>
	    Read  hostnames  or  addresses from the specified file.  One name or
	    address pattern per line. Use "-" for stdin.

     --localnet or -l
	    Generate addresses from  interface	configuration.	 Generates  list
	    from interface address and netmask (network and broadcast included).
	    You  cannot  use  the  --file  option or give targets on the command
	    line.  Use --interface to specify the interface.

   MAC/Vendor Mapping Files
     --ouifile=<s> or -O <s>
	    Use IEEE registry vendor mapping file <s>.	Default is  ieee-oui.txt
	    in	 the   current	 directory.   If  that	is  not  found	/usr/lo-
	    cal/share/arp-scan/ieee-oui.txt is used.

     --macfile=<s> or -m <s>
	    Use custom vendor mapping file <s>.  Default  is  mac-vendor.txt  in
	    the  current  directory.   If  that is not found /usr/local/etc/arp-
	    scan/mac-vendor.txt is used.

   Output Format Control
     --quiet or -q
	    Display minimal output for each responding host.  Only  the  IP  ad-
	    dress  and MAC address are displayed.  Reduces memory usage by about
	    5MB because the vendor mapping files are not used.	Only  the  ${ip}
	    and  ${mac}  fields are available for the --format option if --quiet
	    is specified.

     --plain or -x
	    Supress header and footer text.  Only display  the	responding  host
	    details.  Useful if the output will be parsed by a script.

     --ignoredups or -g
	    Don't  display  duplicate packets.	By default duplicate packets are
	    flagged with (DUP: n) where n is the number of times this  host  has
	    responded.

     --rtt or -D
	    Calculate  and display the packet round-trip time.	The time is dis-
	    played in milliseconds and fractional microseconds. Makes the ${rtt}
	    field available for --format.

     --format=<s> or -F <s>
	    Specify the output format string.  The format is a string that  will
	    be	output for each responding host. Host details can be included by
	    inserting references to fields using the syntax  "${field[;width]}".
	    Fields  are displayed right- aligned unless the width is negative in
	    which case left alignment will be used. The following case- insensi-
	    tive field names are recognised:

	    IP	      Host IPv4 address in dotted quad format
	    Name      Host name if --resolve option given
	    MAC       Host MAC address xx:xx:xx:xx:xx:xx
	    HdrMAC    Ethernet source addr if different
	    Vendor    Vendor details string
	    Padding   Padding after ARP packet in hex if nonzero
	    Framing   Framing type if not Ethernet_II
	    VLAN      802.1Q VLAN ID if present
	    Proto     ARP protocol if not 0x0800
	    DUP       Packet number for duplicate packets (>1)
	    RTT       Round trip time if --rtt option given

	    Only the ${ip} and ${mac} fields are available if the --quiet option
	    is specified.

	    Any characters that are not fields are output verbatim.  "\"  intro-
	    duces escapes:

	    \n	 newline
	    \r	 carriage return
	    \t	 tab
	    \	 suppress special meaning for following character

	    You  should enclose the --format argument in 'single quotes' to pro-
	    tect special characters from the shell.

	    Example: --format='${ip}\t${mac}\t${vendor}'

   Host List Randomisation
     --random or -R
	    Randomise the target host list.

     --randomseed=<i>
	    Seed the pseudo random number generator.  Useful if you want  a  re-
	    producible --random order.

   Output Timing and Retry
     --retry=<i> or -r <i>
	    Set total number of attempts per host to <i>, default=2.

     --backoff=<f> or -b <f>
	    Set  backoff factor to <f>, default=1.50.  Multiplies timeout by <f>
	    for each pass.

     --timeout=<i> or -t <i>
	    Set initial per host timeout to <i> ms, default=500.   This  timeout
	    is	for the first packet sent to each host.  subsequent timeouts are
	    multiplied by the backoff factor which is set with --backoff.

     --interval=<x> or -i <x>
	    Set minimum packet interval to  <x>.   This  controls  the	outgoing
	    bandwidth  usage  by limiting the packet rate. If you want to use up
	    to a given bandwidth it is easier to use the --bandwidth option  in-
	    stead.  The  interval  is in milliseconds, or microseconds if "u" is
	    appended.

     --bandwidth=<x> or -B <x>
	    Set outbound bandwidth to <x>, default=256000.  The value is in bits
	    per second. Append K for kilobits or M for megabits (decimal  multi-
	    ples). You cannot specify both --interval and --bandwidth.

   DNS Resolution
     --numeric or -N
	    Targets  must  be  IP  addresses, not hostnames.  Can reduce startup
	    time for large target lists.

     --resolve or -d
	    Resolve responding addresses to hostnames.	The default output  for-
	    mat  will display the hostname instead of the IPv4 address. This op-
	    tion makes the ${name} field available for the --format option.

   Output ARP Packet
     --arpsha=<m> or -u <m>
	    Set the ARP source Ethernet address.  Sets the 48-bit  ar$sha  field
	    but  does  not  change the hardware address in the frame header, see
	    --srcaddr for how to change that address. Default  is  the	Ethernet
	    address of the outgoing interface.

     --arptha=<m> or -w <m>
	    Set  the ARP target Ethernet address.  Sets the 48-bit ar$tha field.
	    The default is zero, because this field is not used for ARP  request
	    packets.

     --arphrd=<i> or -H <i>
	    Set the ARP hardware type, default=1.  Sets the 16-bit ar$hrd field.
	    The default is 1 (ARPHRD_ETHER). Many operating systems also respond
	    to 6 (ARPHRD_IEEE802).

     --arppro=<i> or -p <i>
	    Set  the  ARP protocol type, default=0x0800.  Sets the 16-bit ar$pro
	    field.  Most operating systems only respond to 0x0800 (IPv4).

     --arphln=<i> or -a <i>
	    Set the hardware address length, default=6.  Sets the  8-bit  ar$hln
	    field.   The lengths of the ar$sha and ar$tha fields are not changed
	    by this option; it only changes the ar$hln field.

     --arppln=<i> or -P <i>
	    Set the protocol address length, default=4.  Sets the  8-bit  ar$pln
	    field.   The lengths of the ar$spa and ar$tpa fields are not changed
	    by this option; it only changes the ar$pln field.

     --arpop=<i> or -o <i>
	    Specify the ARP operation, default=1.  Sets the 16-bit ar$op  field.
	    Most operating systems only respond to the value 1 (ARPOP_REQUEST).

     --arpspa=<a> or -s <a>
	    Set  the  source IPv4 address.  The address should be in dotted quad
	    format, or the string "dest" which sets the source	address  to  the
	    target host address.  The default is the outgoing interface address.
	    Sets  the  32-bit ar$spa field.  Some operating systems only respond
	    if the source address is within the network of the receiving  inter-
	    face.   Setting  ar$spa to the destination IP address can cause some
	    operating systems to report an address clash.

   Output Ethernet Header
     --srcaddr=<m> or -S <m>
	    Set the source Ethernet MAC address.  Default is the  interface  MAC
	    address.  This  sets the address in the Ethernet header. It does not
	    change the address in the ARP packet: use --arpsha	to  change  that
	    address.

     --destaddr=<m> or -T <m>
	    Set  the  destination  MAC address.  Sets the destination address in
	    the Ethernet header. Default is ff:ff:ff:ff:ff:ff (broadcast)  Hosts
	    also  respond if the request is sent to their unicast address, or to
	    a multicast address they are listening on.

     --prototype=<i> or -y <i>
	    Sets the Ethernet protocol type, default=0x0806.  This sets the pro-
	    tocol type field in the Ethernet header.

     --llc or -L
	    Use RFC 1042 LLC/SNAP encapsulation for  802.2  networks.	arp-scan
	    will  decode  and display ARP responses in both Ethernet-II and IEEE
	    802.2 formats irrespective of this option.

     --vlan=<i> or -Q <i>
	    Use 802.1Q tagging with VLAN id <i>.  The id should be in the  range
	    0  to 4095. arp-scan will decode and display ARP responses in 802.1Q
	    format irrespective of this option.

   Misc Options
     --limit=<i> or -M <i>
	    Exit after the specified number of hosts have  responded.	arp-scan
	    will  exit	with  status 1 if the number of responding hosts is less
	    than the limit. Can be used in scripts to check if fewer  hosts  re-
	    spond without having to parse the output.

     --pcapsavefile=<s> or -W <s>
	    Write  received packets to pcap savefile <s>.  ARP responses will be
	    written to the specified file as well  as  being  decoded  and  dis-
	    played.

     --snap=<i> or -n <i>
	    Set  the  pcap  snap length to <i>. Default=64.  Specifies the frame
	    capture length, including the Ethernet header. The default	is  nor-
	    mally sufficient.

     --retry-send=<i> or -Y <i>
	    Set number of send attempts, default=20.

     --retry-send-interval=<i> or -E <i>
	    Set  interval between send attempts.  Interval is in milliseconds or
	    microseconds if "u" is appended. default=5.

     --padding=<h> or -A <h>
	    Specify padding after packet data.	Set padding after  the	ARP  re-
	    quest to hex value <h>.

EXIT STATUS
     arp-scan  will  exit  with 0 on successful completion or >0 if an error was
     encountered.

     If the --limit option is specified, arp-scan will also exit with a non-zero
     exit code if the number of responding hosts  is  less  than  the  specified
     limit.

FILES
     /usr/local/share/arp-scan/ieee-oui.txt
	    List of IEEE OUI (Organisationally Unique Identifier) to vendor map-
	    pings.

     /usr/local/etc/arp-scan/mac-vendor.txt
	    List of other Ethernet MAC to vendor mappings, including local addi-
	    tions.

EXAMPLES
   Simple Scan
     Scan the default network using the interface IPv4 configuration to generate
     the list of hosts to scan.

     $ arp-scan --localnet
     Interface: eth0, type: EN10MB, MAC: 50:65:f3:f0:6d:7c, IPv4: 10.0.0.106
     Starting arp-scan 1.9.9 with 256 hosts (https://github.com/royhills/arp-scan)
     10.0.0.14	     a4:1f:72:7f:25:bb	     Dell Inc.
     10.0.0.22	     10:60:4b:73:43:de	     Hewlett Packard
     10.0.0.74	     00:0c:29:90:07:e9	     VMware, Inc.
     10.0.0.75	     00:0c:29:66:9e:c2	     VMware, Inc.
     10.0.0.76	     00:0c:29:d0:e1:ea	     VMware, Inc.
     10.0.0.82	     9c:b6:54:bb:f3:ec	     Hewlett Packard
     10.0.0.84	     00:21:9b:fd:b9:b3	     Dell Inc.
     10.0.0.85	     00:02:b3:eb:5a:f8	     Intel Corporation
     10.0.0.91	     00:9c:02:a5:7b:29	     Hewlett Packard
     10.0.0.92	     d4:ae:52:d0:07:6f	     Dell Inc.
     10.0.0.93	     d4:ae:52:d0:04:9b	     Dell Inc.
     10.0.0.96	     9c:b6:54:bb:f5:35	     Hewlett Packard
     10.0.0.97	     00:0c:29:0e:95:20	     VMware, Inc.
     10.0.0.104      50:65:f3:f0:70:a4	     Hewlett Packard

     15 packets received by filter, 0 packets dropped by kernel
     Ending arp-scan 1.9.9: 256 hosts scanned in 1.532 seconds (167.10 hosts/sec). 14 responded

   Output Formatting
     Scan  all	hosts  in 10.0.0.0/24 using interface eth0. Calculate round-trip
     time and display in aligned columns using a custom format.

     $ arp-scan -I eth0 --rtt --format='|${ip;-15}|${mac}|${rtt;8}|' 10.0.0.0/24
     Interface: eth0, type: EN10MB, MAC: 50:65:f3:f0:6d:7c, IPv4: 10.0.0.106
     Starting arp-scan 1.9.9 with 256 hosts (https://github.com/royhills/arp-scan)
     |10.0.0.14      |a4:1f:72:7f:25:bb|   0.280|
     |10.0.0.22      |10:60:4b:73:43:de|   0.293|
     |10.0.0.74      |00:0c:29:90:07:e9|   0.380|
     |10.0.0.75      |00:0c:29:66:9e:c2|   0.311|
     |10.0.0.76      |00:0c:29:d0:e1:ea|   0.326|
     |10.0.0.82      |9c:b6:54:bb:f3:ec|   0.216|
     |10.0.0.84      |00:21:9b:fd:b9:b3|   0.244|
     |10.0.0.85      |00:02:b3:eb:5a:f8|   0.244|
     |10.0.0.91      |00:9c:02:a5:7b:29|   0.209|
     |10.0.0.92      |d4:ae:52:d0:07:6f|   0.289|
     |10.0.0.93      |d4:ae:52:d0:04:9b|   0.278|
     |10.0.0.96      |9c:b6:54:bb:f5:35|   0.255|
     |10.0.0.97      |00:0c:29:0e:95:20|   0.288|
     |10.0.0.104     |50:65:f3:f0:70:a4|   0.263|

     14 packets received by filter, 0 packets dropped by kernel
     Ending arp-scan 1.9.9: 256 hosts scanned in 2.032 seconds (125.98 hosts/sec). 14 responded

   CSV Output
     --plain removes extraneous output.

     $ arp-scan -I eth0 --plain --format='${ip},${mac},"${vendor}"' 10.0.0.0/24
     10.0.0.14,a4:1f:72:7f:25:bb,"Dell Inc."
     10.0.0.22,10:60:4b:73:43:de,"Hewlett Packard"
     10.0.0.74,00:0c:29:90:07:e9,"VMware, Inc."
     10.0.0.75,00:0c:29:66:9e:c2,"VMware, Inc."
     10.0.0.76,00:0c:29:d0:e1:ea,"VMware, Inc."
     10.0.0.82,9c:b6:54:bb:f3:ec,"Hewlett Packard"
     10.0.0.84,00:21:9b:fd:b9:b3,"Dell Inc."
     10.0.0.85,00:02:b3:eb:5a:f8,"Intel Corporation"
     10.0.0.91,00:9c:02:a5:7b:29,"Hewlett Packard"
     10.0.0.92,d4:ae:52:d0:07:6f,"Dell Inc."
     10.0.0.93,d4:ae:52:d0:04:9b,"Dell Inc."
     10.0.0.96,9c:b6:54:bb:f5:35,"Hewlett Packard"
     10.0.0.97,00:0c:29:0e:95:20,"VMware, Inc."
     10.0.0.104,50:65:f3:f0:70:a4,"Hewlett Packard"

SEE ALSO
     get-oui(1)

     arp-fingerprint(1)

     http://www.royhills.co.uk/wiki/ The arp-scan wiki page.

     https://github.com/royhills/arp-scan The arp-scan homepage.

				November 9, 2022		     ARP-SCAN(1)

Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=arp-scan&manpath=FreeBSD+15.1-RELEASE+and+Ports>

home | help