thomashabets / arping Goto Github PK
View Code? Open in Web Editor NEWARP Ping
Home Page: http://www.habets.pp.se/synscan/programs.php
License: GNU General Public License v2.0
ARP Ping
Home Page: http://www.habets.pp.se/synscan/programs.php
License: GNU General Public License v2.0
arping/README ARP Ping By Thomas Habets <[email protected]> http://www.habets.pp.se/synscan/ http://github.com/ThomasHabets/arping git clone https://github.com/ThomasHabets/arping.git Introduction ------------ Arping is a util to find out if a specific IP address on the LAN is 'taken' and what MAC address owns it. Sure, you *could* just use 'ping' to find out if it's taken and even if the computer blocks ping (and everything else) you still get an entry in your ARP cache. But what if you aren't on a routable net? Or the host blocks ping (all ICMP even)? Then you're screwed. Or you use arping. Why it's not stupid ------------------- Say you have a block of N real IANA-assigned IP-addresses. You want to debug the net and you don't know which IP addresses are taken. You can't ping anyone before you take the IP, and you can't pick an IP before you know which are already taken. Catch 22. But with arping you can 'ping' the IP and if you get no response, the IP is available. Example uses ------------ If some box is dumping non-IP (like IPX) garbage and you don't know which box it is, you can ping by MAC to get the IP and fix the problem. If you are on someone else's net and want to 'borrow' a real IP address instead of using one of those 10.x.x.x-addresses the DHCP hands out you probably want to know which ones are taken, or people will get mad (a friend of mine got a call on his cellphone about 15 seconds after he accidentally 'stole' an IP, oops). Compiling / installing ---------------------- See INSTALL file. I try to test arping on these platforms before any release: * Latest Debian stable x86 and amd64 * Linux (Debian or Ubuntu) on arm * Latest OpenBSD x86 or amd64 Systems that it should still work on, but I don't personally regularly test: * Debian Alpha * FreeBSD * IRIX 6.5 mips (last test 2009-09-27) * MacOS X * NetBSD * OpenBSD sparc64 (last test: 2009-10-02) * Solaris Mailing list ------------ Check out http://www.habets.pp.se/synscan/mailinglists.php for information on how to subscribe to help- and announce-lists. How it does it -------------- See 'Technical' at the bottom of this file. FAQ --- Q: Where is Arping 1.x? I use libnet 1.0.x so I need that! A: Arping 1 has finally been removed from the Arping 2.x tarball in 2.09. Arping 1.x currently only lives in the Arping packages 2.08 and lower. If features are to be added or bugs fixed it will show up again as a separate package forked from Arping 2.08. For now just get arping-2.08.tar.gz and use that. --- Q: Where's the Windows version? A compiled .exe would be nice. A: I don't have a windows box, so the .exe I'm providing was NOT compiled by me. If something is strange about it tell me, but there won't be much I can do about it. That being said: http://www.habets.pp.se/synscan/files/arping-for-windows-not-compiled-by-me.exe --- Q: After compiling arping without any problem, i test it first with localhost... but it doesn't respond. Isn't that strange? A: Not really, as you can see by typing 'ifconfig' the lo (local) interface does not have a MAC address. It's not a physical device! MAC addresses are there to differentiate computers on a shared medium (the aether, or ether) and since packets to localhost does not go over any wire there is no need to identify which box is talking to which. There is only one. --- Q: Arping can't ping anything! A: Check which interface is active with -v. If it's the wrong one, use -i to set it right. --- Q: Arping finds some hosts, but not others. why? BTW, I have several NICs. A: You have to choose interface with the -i switch if the default is wrong for you. --- Q: I tried to ping my own MAC address, but it doesn't work. A: A sane OS will think it's suspicious if you send packets to yourself over the wire and will ignore them. And why would you want to lookup the IP or MAC of yourself? ifconfig can tell you that. --- Q: I can't ping any/some MAC address on my LAN. A: Arping when pinging a MAC relies on the host to answer a broadcast ping (icmp echo request) properly (IIRC: not the windows way). If you want a host to pop up on MAC ping, you have to config it to respond to broadcast pings. (for linux, make sure /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts is 0) A: -T <IP/host> allows you to restrict the arping to a limited subnet, which may or may not work for you. For example if the box 00:01:02:03:04:05 is on 192.168.0.0/24 then the broadcast probably is 192.168.0.255, so try: # arping -T 192.168.0.255 00:01:02:03:04:05 --- Q: ./configure says I need libnet and/or libpcap A: Arping depends on libnet 1.1 or newer, and libpcap. Get libnet from https://github.com/libnet/libnet and libpcap from http://www.tcpdump.org. Or more likely they were both included in your Linux distribution. The original libnet site was http://packetfactory.openwall.net/projects/libnet/, but is not updated. --- Q: I get bus error on my non-x86 box A: Damn, I thought I fixed those. Tell me how you got it and I'll try to fix it. Attaching config.log always helps. --- Q: I get "libnet_get_ipaddr(): no error" when I run arping with IP (src or dst) 255.255.255.255. A: Use the -b/-B switches. Libnet sucks (ha ha only serious) and returns -1 for error == int32 encoded 255.255.255.255. --- Q: I used to be able to use -S 255.255.255.255, now it fails. What's going on? Q: Why can't I arping 255.255.255.255? A: Argh! Why would you want to? Anyway, this one is due to libnets resolving, and my unwillingness to reimplement it (in a portable manner, ugh). -S 255.255.255.255 can be replaced with -b, and pinging broadcast (why you would do that eludes me) -B. To be extra perverted, try: # ./arping -b -B (yes, I added -b and -B just so that version 1.0 should be complete) --- Q: 1.01 is out, didn't you just say 1.0 was supposed to be the last one? A: Shut up. --- Q: The roundtrip times are off, sometimes by milliseconds! A: I know. Short answer: 'ping' does the same thing. (ping from iputils-ss010824 anyway) Long answer: I can't (portably anyway) do anything other than queue a packet to the network. That means I don't know exactly when it arrived. Also, I can't tell when a packet arrives on the wire, only when arping gets it from the kernel. Just make sure neither the network (whole segment if you are hubbed, just your NIC if you are switched) nor your box is loaded when you care about timing, and/or run arping with higher priority. # nice -n -15 arping foobar But if you find way to get more exact timing portably (or just for one OS really), let me know. --- Q: Is it OK to make arping suid root? A: Be my guest, but if care about security *at all* you will have to restrict execution of arping to trusted users. I could remove "dangerous" features from the code when it's running suid, but I honestly don't want to. This is a network debugging tool, which generates low-level network packets that ordinary users have absolutely no business generating. If you are honestly debugging the network then I don't see why you aren't root already. That being said, on Linux you can add the CAP_NET_RAW capability to arping limiting the damage if arping were to be compromised: sudo setcap cap_net_raw+ep /usr/local/sbin/arping This requires a libnet 1.1.5 or higher, which does not explicitly check for uid 0. For older versions of Libnet: http://github.com/ThomasHabets/libnet/commit/aaa383b5c816107082508b7646929a9479b81645 --- Q: What's this -A switch all about, I don't understand it. A: Normally arping packets are sent out to some kind of broadcast (MAC or IPv4 broadcast) and hosts reply with source address == their address. If -A is given, only packets coming in with a *source* address equal to the *destination* address in the query is accepted. If you don't understand, don't worry. You won't need it. But for an example use, see the arping-scan-net.sh script. --- License ------- It's GPLv2, see the LICENSE file. Technical --------- Yes, I've finally bothered to write how it works. tcpdumps were taken with "tcpdump -vven 'arp or icmp'". The source box is 192.168.0.2/0:10:5a:3e:c5:b4 and the target box is 192.168.0.1/0:60:93:34:91:99. For pinging IP addresses: When a host wants to send an IP packet to another host, it sends out an ARP packet asking what MAC the destination IP address has, a so-called 'who-has' packet. This is then answered by another ARP packet, the 'is-at' packet. 18:16:07.179699 0:10:5a:3e:c5:b4 ff:ff:ff:ff:ff:ff 0806 42: arp who-has 192.168.0.1 tell 192.168.0.2 This is the packet generated by arping. An Ethernet frame from my 3com card to the broadcast address carrying an arp packet asking what MAC 192.168.0.1 has (who-has). 18:16:07.180221 0:60:93:34:91:99 0:10:5a:3e:c5:b4 0806 60: arp reply 192.168.0.1 is-at 0:60:93:34:91:99 The answer, that 192.168.0.1 has MAC 0:60:93:34:91:99 (is-at). For pinging MAC addresses: A broadcast ping (255.255.255.255, or any address supplied with -T, see below) is sent out on the Ethernet, but in an Ethernet frame addressed to the target MAC only. 18:20:09.627321 0:10:5a:3e:c5:b4 0:60:93:34:91:99 0800 42: 192.168.0.2 > 255.255.255.255: icmp: echo request (ttl 48, id 17767, len 28) This is the packet generated by arping. Ethernet frame from my 3com NIC to the destination MAC, carrying a broadcast ping. 18:20:09.628432 0:60:93:34:91:99 0:10:5a:3e:c5:b4 0800 60: 192.168.0.1 > 192.168.0.2: icmp: echo reply (ttl 255, id 7593, len 28) The answer, including the source address of the target host. Note that this is not how every OS responds to a broadcast ping (if at all). Some answer with a source address equal to the broadcast address, and others don't' answer at all. This is why pinging a raw MAC doesn't always work, and you may need to play with -T to get it to answer correctly (or at all). You can always brute-force if you can't even find a broadcast that the box will answer correctly to. ------- for d in $(seq 0 255); do sudo arping -q -c 1 -T $a.$b.$c.$d 0:60:93:34:91:99 if [ $? = 0 ]; then echo "Got answer with address: 192.168.0.$d" fi done -------- Note that this script will take 1 second per IP since that is how long arping waits, so scanning a C-class net will take 256 seconds. If you have a bigger net, then write a program that will run several arpings at the same time to go through more in less time, or check out arping-scan-net.sh, which is a more capable script for scanning, but you need to edit it since the address range it searches is hard-coded. I may add this to arping some day, but don't hold your breath. ----------------------------------------------------------------------- Send questions/suggestions/patches/rants/money/envy to [email protected]
Hello,
is this unicast thing is some redhat patch?
Unicast reply from 10.
arping is displaying Timeout on CentOS-7.6.1810, but I can see the arp reply packages (gratuitous) in tcpdump.
# arping -v
ARPing 2.20, by Thomas Habets <[email protected]>
usage: arping [ -0aAbdDeFpPqrRuUv ] [ -w <sec> ] [ -W <sec> ] [ -S <host/ip> ]
[ -T <host/ip ] [ -s <MAC> ] [ -t <MAC> ] [ -c <count> ]
[ -C <count> ] [ -i <interface> ] [ -m <type> ] [ -g <group> ]
[ -V <vlan> ] [ -Q <priority> ] <host/ip/MAC | -B>
For complete usage info, use --help or check the manpage.
# arping -i eth1 -V 217 -0 10.10.217.1 -c 1 -vvvvvvvv -W3 -p
arping: libnet_init(eth1)
arping: clock_getres() = 0s 1ns
arping: libnet_init(eth1)
arping: libnet_init(eth1)
Timestamp types:
Name Description
host Host
adapter Adapter
adapter_unsynced Adapter, not synced with system time
arping: Successfully chrooted to /var/empty/sshd
arping: Successfully dropped uid/gid to 99/99.
arping: pcap_get_selectable_fd(): 4
This box: Interface: eth1 IP: 255.255.255.255 MAC address: c8:1f:66:ed:74:bd
ARPING 10.10.217.1
arping: sending packet at time 1758649.485481600
arping: receiving packets...
arping: listen for replies for 2.999999530 sec
arping: received response for IP ping
arping: listen for replies for 2.916730013 sec
arping: received response for IP ping
arping: listen for replies for 2.816205510 sec
arping: received response for IP ping
arping: listen for replies for 2.787156679 sec
arping: received response for IP ping
arping: listen for replies for 2.787077017 sec
arping: received response for IP ping
arping: listen for replies for 2.787055684 sec
arping: received response for IP ping
arping: listen for replies for 2.786988205 sec
arping: received response for IP ping
arping: listen for replies for 2.786933507 sec
arping: received response for IP ping
arping: listen for replies for 2.786873469 sec
arping: received response for IP ping
arping: listen for replies for 2.786816478 sec
arping: received response for IP ping
arping: listen for replies for 2.786760759 sec
arping: received response for IP ping
arping: listen for replies for 2.786681887 sec
arping: received response for IP ping
arping: listen for replies for 2.715661653 sec
arping: received response for IP ping
arping: listen for replies for 2.615118869 sec
arping: received response for IP ping
arping: listen for replies for 2.342780055 sec
arping: received response for IP ping
arping: listen for replies for 2.286985953 sec
arping: received response for IP ping
arping: listen for replies for 2.286956056 sec
arping: received response for IP ping
arping: received response for IP ping
arping: listen for replies for 2.286846593 sec
arping: received response for IP ping
arping: listen for replies for 2.286797412 sec
arping: received response for IP ping
arping: listen for replies for 2.286731494 sec
arping: received response for IP ping
arping: listen for replies for 2.286683799 sec
arping: received response for IP ping
arping: listen for replies for 2.286625684 sec
arping: received response for IP ping
arping: received response for IP ping
arping: received response for IP ping
arping: listen for replies for 1.786932023 sec
arping: received response for IP ping
arping: listen for replies for 1.786897342 sec
arping: received response for IP ping
arping: listen for replies for 1.786807094 sec
arping: received response for IP ping
arping: listen for replies for 1.786702378 sec
arping: received response for IP ping
arping: received response for IP ping
arping: listen for replies for 1.286978173 sec
arping: received response for IP ping
arping: listen for replies for 1.286950859 sec
arping: received response for IP ping
arping: listen for replies for 1.286866687 sec
arping: received response for IP ping
arping: listen for replies for 1.286834573 sec
arping: received response for IP ping
arping: received response for IP ping
arping: listen for replies for 0.787018896 sec
Timeout
--- 10.10.217.1 statistics ---
1 packets transmitted, 0 packets received, 100% unanswered (0 extra)
# ldd /usr/local/bin/arping
linux-vdso.so.1 => (0x00007fff2ddc0000)
libpcap.so.1 => /lib64/libpcap.so.1 (0x00007f6c1c03c000)
libnet.so.1 => /lib64/libnet.so.1 (0x00007f6c1be22000)
librt.so.1 => /lib64/librt.so.1 (0x00007f6c1bc1a000)
libnsl.so.1 => /lib64/libnsl.so.1 (0x00007f6c1ba00000)
libm.so.6 => /lib64/libm.so.6 (0x00007f6c1b6fe000)
libc.so.6 => /lib64/libc.so.6 (0x00007f6c1b331000)
libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f6c1b115000)
/lib64/ld-linux-x86-64.so.2 (0x00007f6c1c27d000)
# ethtool -i eth1
driver: tg3
version: 3.137
firmware-version: FFV7.8.16 bc 5720-v1.32
expansion-rom-version:
bus-info: 0000:01:00.1
supports-statistics: yes
supports-test: yes
supports-eeprom-access: yes
supports-register-dump: yes
supports-priv-flags: no
# ifconfig eth1
eth1: flags=4419<UP,BROADCAST,RUNNING,PROMISC,MULTICAST> mtu 1500
ether c8:1f:66:ed:74:bd txqueuelen 1000 (Ethernet)
RX packets 4300320 bytes 295380129 (281.6 MiB)
RX errors 0 dropped 34559 overruns 0 frame 0
TX packets 1206 bytes 77622 (75.8 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
device interrupt 57
Running tcpdump gives the following results
# tcpdump -i eth1 -ennvv "( ether src c8:1f:66:ed:74:bd or ether dst c8:1f:66:ed:74:bd )" or host 10.10.217.1 -s0 -nnvv -xx -tt
tcpdump: listening on eth1, link-type EN10MB (Ethernet), capture size 262144 bytes
1645976679.181471 c8:1f:66:ed:74:bd > ff:ff:ff:ff:ff:ff, ethertype 802.1Q (0x8100), length 62: vlan 217, p 0, ethertype ARP, Ethernet (len 6), IPv4 (len 4), Request who-has 10.10.217.1 tell 0.0.0.0, length 44
0x0000: ffff ffff ffff c81f 66ed 74bd 8100 00d9
0x0010: 0806 0001 0800 0604 0001 c81f 66ed 74bd
0x0020: 0000 0000 0000 0000 0000 0a0a d901 0000
0x0030: 0000 0000 0000 0000 0000 0000 0000
1645976679.285097 e4:3e:c6:45:4f:e8 > ff:ff:ff:ff:ff:ff, ethertype 802.1Q (0x8100), length 64: vlan 217, p 6, ethertype ARP, Ethernet (len 6), IPv4 (len 4), Reply 10.10.217.1 is-at e4:3e:c6:45:4f:e8, length 46
0x0000: ffff ffff ffff e43e c645 4fe8 8100 c0d9
0x0010: 0806 0001 0800 0604 0002 e43e c645 4fe8
0x0020: 0a0a d901 ffff ffff ffff 0a0a d901 0000
0x0030: 0000 0000 0000 0000 0000 0000 0000 0000
1645976679.838619 fa:16:3e:fc:76:01 > ff:ff:ff:ff:ff:ff, ethertype 802.1Q (0x8100), length 60: vlan 217, p 0, ethertype ARP, Ethernet (len 6), IPv4 (len 4), Request who-has 10.10.217.1 tell 10.10.217.100, length 42
0x0000: ffff ffff ffff fa16 3efc 7601 8100 00d9
0x0010: 0806 0001 0800 0604 0001 fa16 3efc 7601
0x0020: 0a0a d964 0000 0000 0000 0a0a d901 0000
0x0030: 0000 0000 0000 0000 0000 0000
1645976684.333373 e4:3e:c6:45:4f:e8 > ff:ff:ff:ff:ff:ff, ethertype 802.1Q (0x8100), length 64: vlan 217, p 6, ethertype ARP, Ethernet (len 6), IPv4 (len 4), Reply 10.10.217.1 is-at e4:3e:c6:45:4f:e8, length 46
0x0000: ffff ffff ffff e43e c645 4fe8 8100 c0d9
0x0010: 0806 0001 0800 0604 0002 e43e c645 4fe8
0x0020: 0a0a d901 ffff ffff ffff 0a0a d901 0000
0x0030: 0000 0000 0000 0000 0000 0000 0000 0000
1645976689.315901 e4:3e:c6:45:4f:e8 > ff:ff:ff:ff:ff:ff, ethertype 802.1Q (0x8100), length 64: vlan 217, p 6, ethertype ARP, Ethernet (len 6), IPv4 (len 4), Reply 10.10.217.1 is-at e4:3e:c6:45:4f:e8, length 46
0x0000: ffff ffff ffff e43e c645 4fe8 8100 c0d9
0x0010: 0806 0001 0800 0604 0002 e43e c645 4fe8
0x0020: 0a0a d901 ffff ffff ffff 0a0a d901 0000
0x0030: 0000 0000 0000 0000 0000 0000 0000 0000
^C
5 packets captured
5 packets received by filter
0 packets dropped by kernel
Also here are the current kernel parameters, which may help
# sysctl -a 2>&1|grep eth1
net.ipv4.conf.eth1.accept_local = 0
net.ipv4.conf.eth1.accept_redirects = 1
net.ipv4.conf.eth1.accept_source_route = 0
net.ipv4.conf.eth1.arp_accept = 0
net.ipv4.conf.eth1.arp_announce = 1
net.ipv4.conf.eth1.arp_filter = 0
net.ipv4.conf.eth1.arp_ignore = 1
net.ipv4.conf.eth1.arp_notify = 0
net.ipv4.conf.eth1.bootp_relay = 0
net.ipv4.conf.eth1.disable_policy = 0
net.ipv4.conf.eth1.disable_xfrm = 0
net.ipv4.conf.eth1.force_igmp_version = 0
net.ipv4.conf.eth1.forwarding = 1
net.ipv4.conf.eth1.log_martians = 0
net.ipv4.conf.eth1.mc_forwarding = 0
net.ipv4.conf.eth1.medium_id = 0
net.ipv4.conf.eth1.promote_secondaries = 1
net.ipv4.conf.eth1.proxy_arp = 0
net.ipv4.conf.eth1.proxy_arp_pvlan = 0
net.ipv4.conf.eth1.route_localnet = 0
net.ipv4.conf.eth1.rp_filter = 0
net.ipv4.conf.eth1.secure_redirects = 1
net.ipv4.conf.eth1.send_redirects = 1
net.ipv4.conf.eth1.shared_media = 1
net.ipv4.conf.eth1.src_valid_mark = 0
net.ipv4.conf.eth1.tag = 0
net.ipv4.neigh.eth1.anycast_delay = 100
net.ipv4.neigh.eth1.app_solicit = 0
net.ipv4.neigh.eth1.base_reachable_time_ms = 30000
net.ipv4.neigh.eth1.delay_first_probe_time = 5
net.ipv4.neigh.eth1.gc_stale_time = 60
net.ipv4.neigh.eth1.locktime = 100
net.ipv4.neigh.eth1.mcast_solicit = 3
net.ipv4.neigh.eth1.proxy_delay = 80
net.ipv4.neigh.eth1.proxy_qlen = 64
net.ipv4.neigh.eth1.retrans_time_ms = 1000
net.ipv4.neigh.eth1.ucast_solicit = 3
net.ipv4.neigh.eth1.unres_qlen = 31
net.ipv4.neigh.eth1.unres_qlen_bytes = 65536
net.ipv6.conf.eth1.accept_dad = 0
net.ipv6.conf.eth1.accept_ra = 0
net.ipv6.conf.eth1.accept_ra_defrtr = 0
net.ipv6.conf.eth1.accept_ra_pinfo = 0
net.ipv6.conf.eth1.accept_ra_rt_info_max_plen = 0
net.ipv6.conf.eth1.accept_ra_rtr_pref = 0
net.ipv6.conf.eth1.accept_redirects = 1
net.ipv6.conf.eth1.accept_source_route = 0
net.ipv6.conf.eth1.autoconf = 1
net.ipv6.conf.eth1.dad_transmits = 1
net.ipv6.conf.eth1.disable_ipv6 = 0
net.ipv6.conf.eth1.enhanced_dad = 1
net.ipv6.conf.eth1.force_mld_version = 0
net.ipv6.conf.eth1.force_tllao = 0
net.ipv6.conf.eth1.forwarding = 0
net.ipv6.conf.eth1.hop_limit = 64
net.ipv6.conf.eth1.keep_addr_on_down = 0
net.ipv6.conf.eth1.max_addresses = 16
net.ipv6.conf.eth1.max_desync_factor = 600
net.ipv6.conf.eth1.mc_forwarding = 0
net.ipv6.conf.eth1.mldv1_unsolicited_report_interval = 10000
net.ipv6.conf.eth1.mldv2_unsolicited_report_interval = 1000
net.ipv6.conf.eth1.mtu = 1500
net.ipv6.conf.eth1.ndisc_notify = 0
net.ipv6.conf.eth1.optimistic_dad = 0
net.ipv6.conf.eth1.proxy_ndp = 0
net.ipv6.conf.eth1.regen_max_retry = 3
net.ipv6.conf.eth1.router_probe_interval = 60
net.ipv6.conf.eth1.router_solicitation_delay = 1
net.ipv6.conf.eth1.router_solicitation_interval = 4
net.ipv6.conf.eth1.router_solicitations = 3
sysctl: reading key "net.ipv6.conf.eth1.stable_secret"
net.ipv6.conf.eth1.temp_prefered_lft = 86400
net.ipv6.conf.eth1.temp_valid_lft = 604800
net.ipv6.conf.eth1.use_optimistic = 0
net.ipv6.conf.eth1.use_tempaddr = 0
net.ipv6.neigh.eth1.anycast_delay = 100
net.ipv6.neigh.eth1.app_solicit = 0
net.ipv6.neigh.eth1.base_reachable_time_ms = 30000
net.ipv6.neigh.eth1.delay_first_probe_time = 5
net.ipv6.neigh.eth1.gc_stale_time = 60
net.ipv6.neigh.eth1.locktime = 0
net.ipv6.neigh.eth1.mcast_solicit = 3
net.ipv6.neigh.eth1.proxy_delay = 80
net.ipv6.neigh.eth1.proxy_qlen = 64
net.ipv6.neigh.eth1.retrans_time_ms = 1000
net.ipv6.neigh.eth1.ucast_solicit = 3
net.ipv6.neigh.eth1.unres_qlen = 31
net.ipv6.neigh.eth1.unres_qlen_bytes = 65536
We use arping
on customer systems to ensure that the server IP isn't used by any other devices in the LAN. The command we use looks like this:
arping -r -c1 -C2 -w20000 -i INTERFACE IP
On one customer system, we've encountered a false positive - arping
claims that the IP is used by the server itself:
server ~ # arping -r -c1 -C2 -w20000 -i eno1 192.168.67.2
ac:1f:6b:79:04:0c
server ~ # ifconfig eno1
eno1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.67.2 netmask 255.255.255.0 broadcast 192.168.67.255
inet6 fe80::ae1f:6bff:fe79:40c prefixlen 64 scopeid 0x20<link>
ether ac:1f:6b:79:04:0c txqueuelen 1000 (Ethernet)
RX packets 24071813 bytes 32854407085 (30.5 GiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 13176299 bytes 1780223344 (1.6 GiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
device memory 0xc7200000-c727ffff
(IMO this shouldn't happen, because the server doesn't actually respond to its own request, as you can see in the tshark
output below.)
With tshark
I was able to figure out that whenever the server sends an ARP lookup for its own IP, the DSL router automatically responds with its own ARP lookup for the server's IP, which the server then responds to:
server ~ # tshark -i eno1 -f 'arp' -n
Running as user "root" and group "root". This could be dangerous.
tshark: Lua: Error during loading:
/usr/share/wireshark/init.lua:32: dofile has been disabled due to running Wireshark as superuser. See https://wiki.wireshark.org/CaptureSetup/CapturePrivileges for help in ru
nning Wireshark as an unprivileged user.
Capturing on 'eno1'
1 0.000000000 ac:1f:6b:79:04:0c → ff:ff:ff:ff:ff:ff ARP 42 Gratuitous ARP for 192.168.67.2 (Request)
2 0.000767760 20:f3:a3:80:2d:ad → ff:ff:ff:ff:ff:ff ARP 60 Who has 192.168.67.2? Tell 192.168.67.1
3 0.000778253 ac:1f:6b:79:04:0c → 20:f3:a3:80:2d:ad ARP 42 192.168.67.2 is at ac:1f:6b:79:04:0c
arping
is apparently confused by this and believes that the response (frame 3) to the DSL router's request (frame 2) is actually a response to its own request (frame 1).
This problem is easily reproducible by having one arping
instance ping its own server, and then another arping
instance on another server pinging the first server. For example, when I run this command on my test server to ping itself, it doesn't get any responses (as expected):
martin ~/arping/src (arping-2.x) # ifconfig enp1s0
enp1s0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 172.17.56.10 netmask 255.255.0.0 broadcast 172.17.255.255
inet6 2003:a:422:3b00:56::10 prefixlen 64 scopeid 0x0<global>
inet6 fe80::acff:fe11:fb18 prefixlen 64 scopeid 0x20<link>
ether 02:00:ac:11:fb:18 txqueuelen 1000 (Ethernet)
RX packets 1796471 bytes 966662387 (921.8 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 1290814 bytes 1470807952 (1.3 GiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
martin ~/arping/src (arping-2.x) # arping -i enp1s0 172.17.56.10
ARPING 172.17.56.10
Timeout
Timeout
Timeout
But when I then run the following command on another server to ping my server:
another-server ~ # arping -i eth1 172.17.56.10
ARPING 172.17.56.10
42 bytes from 02:00:ac:11:fb:18 (172.17.56.10): index=0 time=14.506 msec
42 bytes from 02:00:ac:11:fb:18 (172.17.56.10): index=1 time=5.474 msec
42 bytes from 02:00:ac:11:fb:18 (172.17.56.10): index=2 time=636.879 usec
42 bytes from 02:00:ac:11:fb:18 (172.17.56.10): index=3 time=7.839 msec
42 bytes from 02:00:ac:11:fb:18 (172.17.56.10): index=4 time=15.339 msec
^C
--- 172.17.56.10 statistics ---
5 packets transmitted, 5 packets received, 0% unanswered (0 extra)
rtt min/avg/max/std-dev = 0.637/8.759/15.339/5.549 ms
Then suddenly the arping
on my server shows responses:
martin ~/arping/src (arping-2.x) # arping -i enp1s0 172.17.56.10
ARPING 172.17.56.10
Timeout
Timeout
Timeout
Timeout
Timeout
Timeout
Timeout
Timeout
42 bytes from 02:00:ac:11:fb:18 (172.17.56.10): index=0 time=739.215 msec
42 bytes from 02:00:ac:11:fb:18 (172.17.56.10): index=1 time=750.790 msec
42 bytes from 02:00:ac:11:fb:18 (172.17.56.10): index=2 time=746.490 msec
42 bytes from 02:00:ac:11:fb:18 (172.17.56.10): index=3 time=738.272 msec
42 bytes from 02:00:ac:11:fb:18 (172.17.56.10): index=4 time=745.738 msec
Timeout
Timeout
^C
--- 172.17.56.10 statistics ---
16 packets transmitted, 5 packets received, 69% unanswered (0 extra)
rtt min/avg/max/std-dev = 738.272/744.101/750.790/4.711 ms
Differentiate with icmp ping data, maybe?
configure:4106: checking for libnet_name_resolve in -lnet
configure:4131: /Users/Kevin/Library/Android/sdk/ndk/21.1.6352462/toolchains/llvm/prebuilt/darwin-x86_64/bin/armv7a-linux-androideabi18-clang -o conftest -Wall -I/Users/Kevin/Workspaces/Compile/libnet-1.2/autotools-build/libnet/armeabi-v7a/include -I/Users/Kevin/Workspaces/Compile/libpcap-1.9.1/autotools-build/libpcap/armeabi-v7a/include -Wall -I/Users/Kevin/Workspaces/Compile/libnet-1.2/autotools-build/libnet/armeabi-v7a/include -I/Users/Kevin/Workspaces/Compile/libpcap-1.9.1/autotools-build/libpcap/armeabi-v7a/include -D_DEFAULT_SOURCE=1 -static -L/Users/Kevin/Workspaces/Compile/libnet-1.2/autotools-build/libnet/armeabi-v7a/lib -L/Users/Kevin/Workspaces/Compile/libpcap-1.9.1/autotools-build/libpcap/armeabi-v7a/lib conftest.c -lnet >&5
/var/folders/0l/_d6bm6jn00qg6y8xm_mg10cc0000gn/T/conftest-1e4c45.o:conftest.c:function main: error: undefined reference to 'libnet_name_resolve'
clang: error: linker command failed with exit code 1 (use -v to see invocation)
Possible future feature.
Probably this is not an issue but rather a question.
Setup:
Three interfaces which are combined into one bridge br0
:
# brctl show br0
bridge name bridge id STP enabled interfaces
br0 8000.1c3e84cf4999 no eth0
eth1
wlan0
Linux host is directly attached to Netgear router:
# arp | grep netgear
netgear ether 2c:b0:5d:a6:8e:02 C br0
Doublecheking that the router is 1-hop away:
# traceroute netgear
traceroute to netgear (192.168.10.5), 30 hops max, 60 byte packets
1 netgear (192.168.10.5) 0.281 ms 0.277 ms 0.356 ms
I have compiled arping
from this repo at commit 75b5cdd.
The problem:
I am trying to use arping
to check if the router is up and responding using its MAC address (192.168.10.10 is IP address of br0
):
# /usr/local/sbin/arping -c 3 -S 192.168.10.10 -i eth0 2c:b0:5d:a6:8e:02
ARPING 2c:b0:5d:a6:8e:02
Timeout
Timeout
Timeout
--- 2c:b0:5d:a6:8e:02 statistics ---
3 packets transmitted, 0 packets received, 100% unanswered (0 extra)
Just in case I messed up the interfaces (although I am sure it is connected to eth0
):
# /usr/local/sbin/arping -c 3 -S 192.168.10.10 -i eth1 2c:b0:5d:a6:8e:02
ARPING 2c:b0:5d:a6:8e:02
Timeout
Timeout
Timeout
--- 2c:b0:5d:a6:8e:02 statistics ---
3 packets transmitted, 0 packets received, 100% unanswered (0 extra)
What I do wrong?
Additional info:
I have read the following topics on the subject, most advising to scan or broadcast ping the network and then analyse arp table as a solution:
Nevertheless is MAC-ping possible in my scenario? Thanks!
Hi, using arping 2.20 (or the latest commit from the 2.x branch, 0e5a10f), on macOS 10.3.6, I can't get arping to work:
$ arping 192.168.7.1
arping: libnet_init(LIBNET_LINK, <null>): <no error message>
arping: you may need to run as root
$ sudo arping 192.168.7.1
arping: libnet_init(LIBNET_LINK, <null>): <no error message>
Another user running macOS 10.14 reported the same error to me.
We are using libnet 1.1.6. (I see that libnet 1.2 is out but I haven't tried it yet; I was not sure if arping would be compatible with that since it mentions requiring libnet 1.1.x.)
Hi
There is a small spelling error in the manpage: explaination -> explanation
--- a/doc/arping.8
+++ b/doc/arping.8
@@ -16,7 +16,7 @@ One request is sent each second\&.
.PP
When pinging an IP an ARP who\-has query is sent\&. When pinging a MAC
address a directed broadcast ICMP Echo request is sent\&. For more
-technical explaination and an FAQ, see the README file\&.
+technical explanation and an FAQ, see the README file\&.
.PP
\fINote on timing\fP
.PP
--- a/doc/arping.yodl
+++ b/doc/arping.yodl
@@ -15,7 +15,7 @@ manpagedescription()
When pinging an IP an ARP who-has query is sent. When pinging a MAC
address a directed broadcast ICMP Echo request is sent. For more
- technical explaination and an FAQ, see the README file.
+ technical explanation and an FAQ, see the README file.
em(Note on timing)
When i run arping -i wlan0 192.x.x.x , get this error :
libnet_get_hwaddr(): socket: Permission denied.
I,m already use the root account to run it.
and i wrote simple test code to invoke libnet_get_hwaddr() ,there's no problem,and retun right hwcode. Or run other app that uses libnet‘s method,also no problem.
only run arping ,get this error.
My env. is linux chroot on android phone:
Linux kali 3.10.40-lasyka+ #30 SMP PREEMPT Sat Sep 29 19:40:50 CST 2018 armv7l GNU/Linux
I (Thomas) will probably not be doing this. I'm adding this issue in case someone else wants to take it on.
It shouldn't be that much work. Arping 2.05 compiled on Windows (not by me and I don't know how, but I have the .exe so I know it worked) and there haven't been that many changes since then.
Good afternoon.
I use the arping utility to check the availability of network nodes that do not respond to ping.
In the evenings I ran into the problem that arping does not work
arping: lib net_write(): libnet_write_link(): only -1 bytes written (No buffer space available)
During the day the macs in arp are about 4372 and in the evening when arping is not working about 4463
During the day, the traffic is about 4 Gbit/s and in the evening about 8 Gbit/s
net.ipv4.neigh.default.gc_thresh1 = 1280
net.ipv4.neigh.default.gc_thresh2 = 5120
net.ipv4.neigh.default.gc_thresh3 = 10240
I tried to increase gc_thresh by 2 times but it didn't help
Perhaps you need to make some kind of tuning of the linux kernel so that arping works in the evenings?
arping is displaying Timeout on mac and FreeBSD. Not tried on other platform.
Example:-
$ ./a.out -i en0 -c 3 localhost or $ arping -i en0 -c 3 localhost
ARPING 127.0.0.1
Timeout
Timeout
Timeout
Timeout
Timeout
Timeout
Got this comment from http://freshmeat.sourceforge.net/projects/arping
arping 2.13
Release Notes: This release prints "Timeout" when pings time out, fixes a bug with -w for fractions of seconds, works around a bug in libpcap on Solaris, and implements gratuitous ARP (-U).
Look at how NetworkManager uses arping, and either make arping compatible with it, or make NetworkManager compatible with arping.
So, i've tried creating an arp reply to 192.168.0.105 using this command:
arping -P -p -s 12:34:56:78:9a:bc -S 192.168.0.100 -t ba:98:76:54:32:10 192.168.0.105
Basically, i was trying to tell 192.168.0.105 which mac address belongs to 192.168.0.100. -t was supposted to change Target MAC Address of the ARP protocol, but only changed the Ethernet layer destination mac address. It should be the same on both fields.
Because of this, the Target MAC Address was 00:00:00:00:00:00 so 192.168.0.105 refused the arp reply. Is this expected behavior or i've found a bug? Thanks in advance.
macOS 10.11.6
libnet 1.2
no wireshark, no little snitch
sudo arping -i en0 192.168.1.1
Password:
arping: libnet_init(LIBNET_LINK, en0): libnet_bpf_open(): open(): (/dev/bpf0): Permission denied
ls -l bpf0
crw------- 1 root wheel 23, 0 5 Aug 15:30 bpf0
==============
sudo arping -vvvvv 192.168.1.1
arping: Using gettimeofday() for time measurements
arping: libnet_init()
arping: libnet_init(lo)
arping: libnet_init(LIBNET_LINK, ): libnet_bpf_open(): open(): (/dev/bpf0): Permission denied
==============
sudo tcpdump -i en0
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on en0, link-type EN10MB (Ethernet), capture size 262144 bytes
==============
sudo dtruss arping 192.168.1.1
arping: libnet_init(LIBNET_LINK, ): libnet_bpf_open(): open(): (/dev/bpf0): Permission denied
SYSCALL(args) = return
thread_selfid(0x0, 0x0, 0x0) = 114667 0
csops(0x0, 0x0, 0x7FFF51F3BB10) = 0 0
issetugid(0x0, 0x0, 0x7FFF51F3BB10) = 1 0
shared_region_check_np(0x7FFF51F39A18, 0x0, 0x7FFF51F3BB10) = 0 0
stat64("/usr/lib/libpcap.A.dylib\0", 0x7FFF51F3ADA8, 0x7FFF51F3BB10) = 0 0
stat64("/usr/local/opt/libnet/lib/libnet.9.dylib\0", 0x7FFF51F3ADA8, 0x7FFF51F3BB10) = 0 0
open("/usr/local/opt/libnet/lib/libnet.9.dylib\0", 0x0, 0x0) = 3 0
pread(0x3, "\317\372\355\376\a\0", 0x1000, 0x0) = 4096 0
mmap(0x10DCD0000, 0xE000, 0x5, 0x12, 0x3, 0x0) = 0x10DCD0000 0
mmap(0x10DCDE000, 0x1000, 0x3, 0x12, 0x3, 0xE000) = 0x10DCDE000 0
mmap(0x10DCE1000, 0x3334, 0x1, 0x12, 0x3, 0xF000) = 0x10DCE1000 0
fcntl(0x3, 0x2C, 0x7FFF51F39148) = 0 0
close(0x3) = 0 0
stat64("/usr/lib/libSystem.B.dylib\0", 0x7FFF51F3ADA8, 0x7FFF51F39148) = 0 0
stat64("/usr/lib/system/libcache.dylib\0", 0x7FFF51F3A8D8, 0x7FFF51F39148) = 0 0
stat64("/usr/lib/system/libcommonCrypto.dylib\0", 0x7FFF51F3A8D8, 0x7FFF51F39148) = 0 0
stat64("/usr/lib/system/libcompiler_rt.dylib\0", 0x7FFF51F3A8D8, 0x7FFF51F39148 = 0 0
stat64("/usr/lib/system/libcopyfile.dylib\0", 0x7FFF51F3A8D8, 0x7FFF51F39148) = 0 0
stat64("/usr/lib/system/libcorecrypto.dylib\0", 0x7FFF51F3A8D8, 0x7FFF51F39148) = 0 0
stat64("/usr/lib/system/libdispatch.dylib\0", 0x7FFF51F3A8D8, 0x7FFF51F39148) = 0 0
stat64("/usr/lib/system/libdyld.dylib\0", 0x7FFF51F3A8D8, 0x7FFF51F39148) = 0 0
stat64("/usr/lib/system/libkeymgr.dylib\0", 0x7FFF51F3A8D8, 0x7FFF51F39148) = 0 0
stat64("/usr/lib/system/liblaunch.dylib\0", 0x7FFF51F3A8D8, 0x7FFF51F39148) = 0 0
stat64("/usr/lib/system/libmacho.dylib\0", 0x7FFF51F3A8D8, 0x7FFF51F39148) = 0 0
stat64("/usr/lib/system/libquarantine.dylib\0", 0x7FFF51F3A8D8, 0x7FFF51F39148) = 0 0
stat64("/usr/lib/system/libremovefile.dylib\0", 0x7FFF51F3A8D8, 0x7FFF51F39148) = 0 0
stat64("/usr/lib/system/libsystem_asl.dylib\0", 0x7FFF51F3A8D8, 0x7FFF51F39148) = 0 0
stat64("/usr/lib/system/libsystem_blocks.dylib\0", 0x7FFF51F3A8D8, 0x7FFF51F39148) = 0 0
stat64("/usr/lib/system/libsystem_c.dylib\0", 0x7FFF51F3A8D8, 0x7FFF51F39148) = 0 0
stat64("/usr/lib/system/libsystem_configuration.dylib\0", 0x7FFF51F3A8D8, 0x7FFF51F39148) = 0 0
stat64("/usr/lib/system/libsystem_coreservices.dylib\0", 0x7FFF51F3A8D8, 0x7FFF51F39148) = 0 0
stat64("/usr/lib/system/libsystem_coretls.dylib\0", 0x7FFF51F3A8D8, 0x7FFF51F39148) = 0 0
stat64("/usr/lib/system/libsystem_dnssd.dylib\0", 0x7FFF51F3A8D8, 0x7FFF51F39148) = 0 0
stat64("/usr/lib/system/libsystem_info.dylib\0", 0x7FFF51F3A8D8, 0x7FFF51F39148 = 0 0
stat64("/usr/lib/system/libsystem_kernel.dylib\0", 0x7FFF51F3A8D8, 0x7FFF51F39148) = 0 0
stat64("/usr/lib/system/libsystem_m.dylib\0", 0x7FFF51F3A8D8, 0x7FFF51F39148) = 0 0
stat64("/usr/lib/system/libsystem_malloc.dylib\0", 0x7FFF51F3A8D8, 0x7FFF51F39148) = 0 0
stat64("/usr/lib/system/libsystem_network.dylib\0", 0x7FFF51F3A8D8, 0x7FFF51F39148) = 0 0
stat64("/usr/lib/system/libsystem_networkextension.dylib\0", 0x7FFF51F3A8D8, 0x7FFF51F39148) = 0 0
stat64("/usr/lib/system/libsystem_notify.dylib\0", 0x7FFF51F3A8D8, 0x7FFF51F39148) = 0 0
stat64("/usr/lib/system/libsystem_platform.dylib\0", 0x7FFF51F3A8D8, 0x7FFF51F39148) = 0 0
stat64("/usr/lib/system/libsystem_pthread.dylib\0", 0x7FFF51F3A8D8, 0x7FFF51F39148) = 0 0
stat64("/usr/lib/system/libsystem_sandbox.dylib\0", 0x7FFF51F3A8D8, 0x7FFF51F39148) = 0 0
stat64("/usr/lib/system/libsystem_secinit.dylib\0", 0x7FFF51F3A8D8, 0x7FFF51F39148) = 0 0
stat64("/usr/lib/system/libsystem_trace.dylib\0", 0x7FFF51F3A8D8, 0x7FFF51F39148) = 0 0
stat64("/usr/lib/system/libunc.dylib\0", 0x7FFF51F3A8D8, 0x7FFF51F39148) = 0 0
stat64("/usr/lib/system/libunwind.dylib\0", 0x7FFF51F3A8D8, 0x7FFF51F39148) = 0 0
stat64("/usr/lib/system/libxpc.dylib\0", 0x7FFF51F3A8D8, 0x7FFF51F39148) = 0 0
stat64("/usr/lib/libobjc.A.dylib\0", 0x7FFF51F39BB8, 0x7FFF51F39148) = 0 0
stat64("/usr/lib/libauto.dylib\0", 0x7FFF51F39BB8, 0x7FFF51F39148) = 0 0
stat64("/usr/lib/libc++abi.dylib\0", 0x7FFF51F39A98, 0x7FFF51F39148) = 0 0
stat64("/usr/lib/libc++.1.dylib\0", 0x7FFF51F39A98, 0x7FFF51F39148) = 0 0
stat64("/usr/lib/libDiagnosticMessagesClient.dylib\0", 0x7FFF51F39988, 0x7FFF51F39148) = 0 0
getpid(0x7FFF85EE2740, 0x7FFF51F39988, 0x7FFF51F39148) = 17334 0
open("/dev/dtracehelper\0", 0x2, 0x7FFF51F3B9D0) = 3 0
ioctl(0x3, 0x80086804, 0x7FFF51F3B958) = 0 0
close(0x3) = 0 0
sysctl(0x7FFF51F3B070, 0x2, 0x7FFF51F3B080) = 0 0
thread_selfid(0x7FFF51F3B070, 0x2, 0x7FFF51F3B080) = 114667 0
bsdthread_register(0x7FFF8E3E8344, 0x7FFF8E3E8334, 0x2000) = 1073741887 0
mprotect(0x10DCE5000, 0x88, 0x1) = 0 0
mprotect(0x10DCE7000, 0x1000, 0x0) = 0 0
mprotect(0x10DCFD000, 0x1000, 0x0) = 0 0
mprotect(0x10DCFE000, 0x1000, 0x0) = 0 0
mprotect(0x10DD14000, 0x1000, 0x0) = 0 0
mprotect(0x10DD15000, 0x1000, 0x1) = 0 0
mprotect(0x10DCE5000, 0x88, 0x3) = 0 0
mprotect(0x10DCE5000, 0x88, 0x1) = 0 0
issetugid(0x10DCE5000, 0x88, 0x1) = 1 0
getpid(0x10DCE5000, 0x88, 0x1) = 17334 0
stat64("/AppleInternal/XBS/.isChrooted\0", 0x7FFF51F3AFD8, 0x1) = -1 Err#2
stat64("/AppleInternal\0", 0x7FFF51F3AF48, 0x1) = -1 Err#2
csops(0x43B6, 0x7, 0x7FFF51F3AA60) = -1 Err#22
sysctl(0x7FFF51F3AE20, 0x4, 0x7FFF51F3AB98) = 0 0
csops(0x43B6, 0x7, 0x7FFF51F3A350) = -1 Err#22
proc_info(0x2, 0x43B6, 0x11) = 56 0
socket(0x2, 0x2, 0x0) = 3 0
ioctl(0x3, 0xC00C6924, 0x7FFF51F38280) = 0 0
ioctl(0x3, 0xC0206911, 0x7FFF51F3C2A0) = 0 0
ioctl(0x3, 0xC0206911, 0x7FFF51F3C2A0) = 0 0
ioctl(0x3, 0xC0206911, 0x7FFF51F3C2A0) = 0 0
ioctl(0x3, 0xC0206911, 0x7FFF51F3C2A0) = 0 0
ioctl(0x3, 0xC0206921, 0x7FFF51F3C2A0) = 0 0
ioctl(0x3, 0xC0206911, 0x7FFF51F3C2A0) = 0 0
ioctl(0x3, 0xC0206921, 0x7FFF51F3C2A0) = -1 Err#49
ioctl(0x3, 0xC0206911, 0x7FFF51F3C2A0) = 0 0
ioctl(0x3, 0xC0206921, 0x7FFF51F3C2A0) = -1 Err#49
close(0x3) = 0 0
open("/dev/bpf0\0", 0x2, 0x10DCDD8BF) = -1 Err#13
socket(0x2, 0x2, 0x0) = 3 0
ioctl(0x3, 0xC0206911, 0x7FFF51F3C168) = -1 Err#6
close(0x3) = 0 0
write_nocancel(0x2, "arping: libnet_init(LIBNET_LINK, ): libnet_bpf_open(): open(): (/dev/bpf0): Permission denied\n\0", 0x64) = 100 0
getuid(0x2, 0x7FFF51F3BD70, 0x64) = 0 0
See #24
I need print time of every ping, but I can't see any type info for -m option
I am trying to make a package with arping 2.24 for openwrt, but there's only libnet-1.2.x in library, so I typed noticed it as a dependency. When compiling I got the following output:
make[3]: Entering directory '/builddir/bloop_r2/build_dir/target-mipsel_24kc_musl_R2/arping-1.0.1'
make all-recursive
make[4]: Entering directory '/builddir/bloop_r2/build_dir/target-mipsel_24kc_musl_R2/arping-1.0.1'
Making all in src
make[5]: Entering directory '/builddir/bloop_r2/build_dir/target-mipsel_24kc_musl_R2/arping-1.0.1/src'
mipsel-openwrt-linux-musl-gcc -DHAVE_CONFIG_H -I. -I.. -I/builddir/bloop_r2/staging_dir/target-mipsel_24kc_musl_R2/usr/include -I/builddir/bloop_r2/staging_dir/target-mipsel_24kc_musl_R2/include -I/builddir/bloop_r2/staging_dir/toolchain-mipsel_24kc_gcc-7.5.0_musl/usr/include -I/builddir/bloop_r2/staging_dir/toolchain-mipsel_24kc_gcc-7.5.0_musl/include/fortify -I/builddir/bloop_r2/staging_dir/toolchain-mipsel_24kc_gcc-7.5.0_musl/include -D_DEFAULT_SOURCE=1 -Os -pipe -mno-branch-likely -mips32r2 -mtune=24kc -fno-caller-saves -fhonour-copts -Wno-error=unused-but-set-variable -Wno-error=unused-result -msoft-float -iremap/builddir/bloop_r2/build_dir/target-mipsel_24kc_musl_R2/arping-1.0.1:arping-1.0.1 -Wl,-z,now -Wl,-z,relro -std=c99 -MT arping.o -MD -MP -MF .deps/arping.Tpo -c -o arping.o arping.c
In file included from /builddir/bloop_r2/staging_dir/target-mipsel_24kc_musl_R2/usr/include/pcap/pcap.h:90:0,
from /builddir/bloop_r2/staging_dir/target-mipsel_24kc_musl_R2/usr/include/pcap.h:43,
from arping.c:125:
/builddir/bloop_r2/staging_dir/target-mipsel_24kc_musl_R2/usr/include/pcap/bpf.h:85:9: error: unknown type name 'u_int'
typedef u_int bpf_u_int32;
^~~~~
/builddir/bloop_r2/staging_dir/target-mipsel_24kc_musl_R2/usr/include/pcap/bpf.h:105:2: error: unknown type name 'u_int'
u_int bf_len;
^~~~~
In file included from /builddir/bloop_r2/staging_dir/target-mipsel_24kc_musl_R2/usr/include/pcap/pcap.h:90:0,
from /builddir/bloop_r2/staging_dir/target-mipsel_24kc_musl_R2/usr/include/pcap.h:43,
from arping.c:125:
/builddir/bloop_r2/staging_dir/target-mipsel_24kc_musl_R2/usr/include/pcap/bpf.h:235:2: error: unknown type name 'u_short'
u_short code;
^~~~~~~
/builddir/bloop_r2/staging_dir/target-mipsel_24kc_musl_R2/usr/include/pcap/bpf.h:236:2: error: unknown type name 'u_char'
u_char jt;
^~~~~~
/builddir/bloop_r2/staging_dir/target-mipsel_24kc_musl_R2/usr/include/pcap/bpf.h:237:2: error: unknown type name 'u_char'
u_char jf;
^~~~~~
/builddir/bloop_r2/staging_dir/target-mipsel_24kc_musl_R2/usr/include/pcap/bpf.h:248:10: error: unknown type name 'u_int'
PCAP_API u_int bpf_filter(const struct bpf_insn *, const u_char *, u_int, u_int);
^~~~~
/builddir/bloop_r2/staging_dir/target-mipsel_24kc_musl_R2/usr/include/pcap/bpf.h:248:58: error: unknown type name 'u_char'
PCAP_API u_int bpf_filter(const struct bpf_insn *, const u_char *, u_int, u_int);
^~~~~~
/builddir/bloop_r2/staging_dir/target-mipsel_24kc_musl_R2/usr/include/pcap/bpf.h:248:68: error: unknown type name 'u_int'; did you mean '__u_int'?
PCAP_API u_int bpf_filter(const struct bpf_insn *, const u_char *, u_int, u_int);
^~~~~
__u_int
/builddir/bloop_r2/staging_dir/target-mipsel_24kc_musl_R2/usr/include/pcap/bpf.h:248:75: error: unknown type name 'u_int'; did you mean '__u_int'?
PCAP_API u_int bpf_filter(const struct bpf_insn *, const u_char *, u_int, u_int);
^~~~~
__u_int
In file included from /builddir/bloop_r2/staging_dir/target-mipsel_24kc_musl_R2/usr/include/pcap.h:43:0,
from arping.c:125:
/builddir/bloop_r2/staging_dir/target-mipsel_24kc_musl_R2/usr/include/pcap/pcap.h:165:2: error: unknown type name 'u_short'
u_short version_major;
^~~~~~~
/builddir/bloop_r2/staging_dir/target-mipsel_24kc_musl_R2/usr/include/pcap/pcap.h:166:2: error: unknown type name 'u_short'
u_short version_minor;
^~~~~~~
/builddir/bloop_r2/staging_dir/target-mipsel_24kc_musl_R2/usr/include/pcap/pcap.h:211:2: error: unknown type name 'u_int'
u_int ps_recv; /* number of packets received */
^~~~~
/builddir/bloop_r2/staging_dir/target-mipsel_24kc_musl_R2/usr/include/pcap/pcap.h:212:2: error: unknown type name 'u_int'
u_int ps_drop; /* number of packets dropped */
^~~~~
/builddir/bloop_r2/staging_dir/target-mipsel_24kc_musl_R2/usr/include/pcap/pcap.h:213:2: error: unknown type name 'u_int'
u_int ps_ifdrop; /* drops by interface -- only supported on some platforms */
^~~~~
/builddir/bloop_r2/staging_dir/target-mipsel_24kc_musl_R2/usr/include/pcap/pcap.h:286:30: error: unknown type name 'u_char'; did you mean '__u_char'?
typedef void (*pcap_handler)(u_char *, const struct pcap_pkthdr *,
^~~~~~
__u_char
/builddir/bloop_r2/staging_dir/target-mipsel_24kc_musl_R2/usr/include/pcap/pcap.h:287:15: error: unknown type name 'u_char'
const u_char *);
^~~~~~
/builddir/bloop_r2/staging_dir/target-mipsel_24kc_musl_R2/usr/include/pcap/pcap.h:411:65: error: unknown type name 'u_int'; did you mean '__u_int'?
PCAP_API pcap_t *pcap_open_dead_with_tstamp_precision(int, int, u_int);
^~~~~
__u_int
/builddir/bloop_r2/staging_dir/target-mipsel_24kc_musl_R2/usr/include/pcap/pcap.h:412:72: error: unknown type name 'u_int'; did you mean '__u_int'?
PCAP_API pcap_t *pcap_open_offline_with_tstamp_precision(const char *, u_int, char *);
^~~~~
__u_int
/builddir/bloop_r2/staging_dir/target-mipsel_24kc_musl_R2/usr/include/pcap/pcap.h:437:69: error: unknown type name 'u_int'; did you mean '__u_int'?
PCAP_API pcap_t *pcap_fopen_offline_with_tstamp_precision(FILE *, u_int, char *);
^~~~~
__u_int
/builddir/bloop_r2/staging_dir/target-mipsel_24kc_musl_R2/usr/include/pcap/pcap.h:442:39: error: unknown type name 'pcap_handler'; did you mean 'pcap_addr_t'?
PCAP_API int pcap_loop(pcap_t *, int, pcap_handler, u_char *);
^~~~~~~~~~~~
pcap_addr_t
/builddir/bloop_r2/staging_dir/target-mipsel_24kc_musl_R2/usr/include/pcap/pcap.h:442:53: error: unknown type name 'u_char'; did you mean '__u_char'?
PCAP_API int pcap_loop(pcap_t *, int, pcap_handler, u_char *);
^~~~~~
__u_char
/builddir/bloop_r2/staging_dir/target-mipsel_24kc_musl_R2/usr/include/pcap/pcap.h:443:43: error: unknown type name 'pcap_handler'; did you mean 'pcap_addr_t'?
PCAP_API int pcap_dispatch(pcap_t *, int, pcap_handler, u_char *);
^~~~~~~~~~~~
pcap_addr_t
/builddir/bloop_r2/staging_dir/target-mipsel_24kc_musl_R2/usr/include/pcap/pcap.h:443:57: error: unknown type name 'u_char'; did you mean '__u_char'?
PCAP_API int pcap_dispatch(pcap_t *, int, pcap_handler, u_char *);
^~~~~~
__u_char
/builddir/bloop_r2/staging_dir/target-mipsel_24kc_musl_R2/usr/include/pcap/pcap.h:444:16: error: unknown type name 'u_char'
PCAP_API const u_char *pcap_next(pcap_t *, struct pcap_pkthdr *);
^~~~~~
/builddir/bloop_r2/staging_dir/target-mipsel_24kc_musl_R2/usr/include/pcap/pcap.h:445:67: error: unknown type name 'u_char'
PCAP_API int pcap_next_ex(pcap_t *, struct pcap_pkthdr **, const u_char **);
^~~~~~
/builddir/bloop_r2/staging_dir/target-mipsel_24kc_musl_R2/usr/include/pcap/pcap.h:453:46: error: unknown type name 'u_char'
PCAP_API int pcap_sendpacket(pcap_t *, const u_char *, int);
^~~~~~
/builddir/bloop_r2/staging_dir/target-mipsel_24kc_musl_R2/usr/include/pcap/pcap.h:464:40: error: unknown type name 'u_char'
const struct pcap_pkthdr *, const u_char *);
^~~~~~
/builddir/bloop_r2/staging_dir/target-mipsel_24kc_musl_R2/usr/include/pcap/pcap.h:517:25: error: unknown type name 'u_char'; did you mean '__u_char'?
PCAP_API void pcap_dump(u_char *, const struct pcap_pkthdr *, const u_char *);
^~~~~~
__u_char
/builddir/bloop_r2/staging_dir/target-mipsel_24kc_musl_R2/usr/include/pcap/pcap.h:517:69: error: unknown type name 'u_char'
PCAP_API void pcap_dump(u_char *, const struct pcap_pkthdr *, const u_char *);
^~~~~~
/builddir/bloop_r2/staging_dir/target-mipsel_24kc_musl_R2/usr/include/pcap/pcap.h:547:12: error: unknown type name 'u_int'
PCAP_API u_int bpf_filter(const struct bpf_insn *, const u_char *, u_int, u_int);
^~~~~
/builddir/bloop_r2/staging_dir/target-mipsel_24kc_musl_R2/usr/include/pcap/pcap.h:547:60: error: unknown type name 'u_char'
PCAP_API u_int bpf_filter(const struct bpf_insn *, const u_char *, u_int, u_int);
^~~~~~
/builddir/bloop_r2/staging_dir/target-mipsel_24kc_musl_R2/usr/include/pcap/pcap.h:547:70: error: unknown type name 'u_int'; did you mean '__u_int'?
PCAP_API u_int bpf_filter(const struct bpf_insn *, const u_char *, u_int, u_int);
^~~~~
__u_int
/builddir/bloop_r2/staging_dir/target-mipsel_24kc_musl_R2/usr/include/pcap/pcap.h:547:77: error: unknown type name 'u_int'; did you mean '__u_int'?
PCAP_API u_int bpf_filter(const struct bpf_insn *, const u_char *, u_int, u_int);
^~~~~
__u_int
arping.c: In function 'drop_fs_root':
arping.c:446:13: warning: implicit declaration of function 'chroot'; did you mean 'chmod'? [-Wimplicit-function-declaration]
if (chroot(pw->pw_dir)) {
^~~~~~
chmod
arping.c: In function 'drop_uid':
arping.c:475:13: warning: implicit declaration of function 'setgroups'; did you mean 'getgroups'? [-Wimplicit-function-declaration]
if (setgroups(0, NULL)) {
^~~~~~~~~
getgroups
arping.c: In function 'do_pcap_open_live':
arping.c:860:18: error: 'PATH_MAX' undeclared (first use in this function); did you mean 'AF_MAX'?
char buf[PATH_MAX];
^~~~~~~~
AF_MAX
arping.c:860:18: note: each undeclared identifier is reported only once for each function it appears in
arping.c: In function 'pingip_recv':
arping.c:1603:29: error: 'u_char' undeclared (first use in this function); did you mean 'putchar'?
if (memcmp((u_char*)harp + sizeof(struct libnet_arp_hdr),
^~~~~~
putchar
arping.c:1603:36: error: expected expression before ')' token
if (memcmp((u_char*)harp + sizeof(struct libnet_arp_hdr),
^
arping.c:1603:21: error: too few arguments to function 'memcmp'
if (memcmp((u_char*)harp + sizeof(struct libnet_arp_hdr),
^~~~~~
In file included from /builddir/bloop_r2/staging_dir/toolchain-mipsel_24kc_gcc-7.5.0_musl/include/fortify/string.h:22:0,
from arping.c:42:
/builddir/bloop_r2/staging_dir/toolchain-mipsel_24kc_gcc-7.5.0_musl/include/string.h:28:5: note: declared here
int memcmp (const void *, const void *, size_t);
^~~~~~
arping.c:1621:44: error: expected expression before ')' token
const uint8_t* p = (u_char*)harp
^
arping.c: At top level:
arping.c:1909:46: error: unknown type name 'pcap_handler'; did you mean 'pcap_addr_t'?
ping_recv(pcap_t *pcap, uint32_t packetwait, pcap_handler func)
^~~~~~~~~~~~
pcap_addr_t
arping.c: In function 'arping_main':
arping.c:2087:9: warning: implicit declaration of function 'srandom'; did you mean 'xrandom'? [-Wimplicit-function-declaration]
srandom((unsigned)time(NULL));
^~~~~~~
xrandom
arping.c:2416:11: warning: implicit declaration of function 'strdup'; did you mean 'strcmp'? [-Wimplicit-function-declaration]
parm = strdup(libnet_addr2name4(dstip,0));
^~~~~~
strcmp
arping.c:2416:9: warning: assignment makes pointer from integer without a cast [-Wint-conversion]
parm = strdup(libnet_addr2name4(dstip,0));
^
arping.c:2457:8: warning: assignment makes pointer from integer without a cast [-Wint-conversion]
parm = strdup(libnet_addr2name4(dstip,0));
^
arping.c:2657:25: warning: implicit declaration of function 'ping_recv'; did you mean 'pingip_recv'? [-Wimplicit-function-declaration]
ping_recv(pcap, w, (pcap_handler)pingip_recv);
^~~~~~~~~
pingip_recv
arping.c:2657:45: error: 'pcap_handler' undeclared (first use in this function); did you mean 'pcap_addr'?
ping_recv(pcap, w, (pcap_handler)pingip_recv);
^~~~~~~~~~~~
pcap_addr
arping.c:2657:58: error: expected ')' before 'pingip_recv'
ping_recv(pcap, w, (pcap_handler)pingip_recv);
^~~~~~~~~~~
arping.c:2668:59: error: expected ')' before 'pingmac_recv'
ping_recv(pcap, w, (pcap_handler)pingmac_recv);
^~~~~~~~~~~~
make[5]: *** [Makefile:620: arping.o] Error 1
make[5]: Leaving directory '/builddir/bloop_r2/build_dir/target-mipsel_24kc_musl_R2/arping-1.0.1/src'
make[4]: *** [Makefile:377: all-recursive] Error 1
make[4]: Leaving directory '/builddir/bloop_r2/build_dir/target-mipsel_24kc_musl_R2/arping-1.0.1'
make[3]: *** [Makefile:317: all] Error 2
make[3]: Leaving directory '/builddir/bloop_r2/build_dir/target-mipsel_24kc_musl_R2/arping-1.0.1'
make[2]: *** [Makefile:37: /builddir/bloop_r2/build_dir/target-mipsel_24kc_musl_R2/arping-1.0.1/.built] Error 2
make[2]: Leaving directory '/builddir/bloop_r2/feeds/bloop_packages/arping'
time: package/feeds/bloop_packages/arping/compile#0.26#0.08#0.38
make[1]: *** [package/Makefile:113: package/feeds/bloop_packages/arping/compile] Error 2
make[1]: Leaving directory '/builddir/bloop_r2'
make: *** [/builddir/bloop_r2/include/toplevel.mk:227: package/arping/compile] Ошибка 2
Use case: quickly check whether some devices are alive on a network. Currently arping waits for the timeout even when given -c 1 before exiting. So checking e.g. 50 devices would take quite some time.
Arping 2.19
$ ./configure --prefix=/usr
$ make
$ make check
The content of "test-suite.log" file is:
# TOTAL: 1
# PASS: 0
# SKIP: 0
# XFAIL: 0
# FAIL: 1
# XPASS: 0
# ERROR: 0
.. contents:: :depth: 2
FAIL: arping_test
=================
Running suite(s): Arping
60 bytes from 77:88:99:aa:bb:cc (18.52.86.120): index=1 time=592726.104 sec
arping: libnet_init(LIBNET_LINK, <null>):
FAIL arping_test (exit status: 1)
iputils arping has the -f
option which would be nice to have in your arping as well for compatibility:
-f : quit on first reply
Maybe just aliasing it to -C 1
(capital C) would be close enough/suffice, if mimicing the iputils behavior isn't feasible. For the iputils one, specifying -f
in addition to -c 1
is useful as it makes the command return quicker, immediately on the first received reply.
Transfer from old bugs database. Is this still relevant?
arping
drops all privileges, but since Android uses predefined group ids to allow access to various things (enforced by the kernel), dropping all group ids causes arping
to fail even though the user has access to raw sockets (inet(3003)
).
Fail message:
arping: libnet_get_hwaddr(): socket: Permission denied
Note that it's not about opening raw sockets, that works fine before dropping privileges. Here's the offending syscall:
setgroups32(0, []) = 0
setgid32(65534) = 0
setuid32(65534) = 0
...
socket(PF_INET, SOCK_DGRAM, IPPROTO_IP) = -1 EACCES (Permission denied)
Maybe it could be solved by making privilege drop optional?
./bootstrap.sh: 2: ./bootstrap.sh: autoreconf: not found
Any ideas?
This commit results in a compilation error due to a missing comma.
setresuid() if available.
Drop capabilities if available.
I am quite new to linux and I was trying to install arping on my raspberry pi (Rasbian).
So I downloaded the latest arping version from here https://github.com/ThomasHabets/arping/releases), put it on my raspberry pi and extracted the .tar.gz file.
After that I tried to follow the instructions given in the Install file (https://github.com/ThomasHabets/arping/blob/arping-2.x/INSTALL)
When I try to follow the instructions I get this error:
[15:16:19] openhabian@openHABianPi:~$ cd arping-arping-2.19
[15:16:27] openhabian@openHABianPi:~/arping-arping-2.19$ ls
bootstrap.sh doc fuzz INSTALL Makefile.am README
configure.ac extra HACKING.md LICENSE Makefile.am.common src
[15:16:28] openhabian@openHABianPi:~/arping-arping-2.19$ ./configure
-bash: ./configure: No such file or directory
[15:17:51] openhabian@openHABianPi:~/arping-arping-2.19$ make
make: *** No targets specified and no makefile found. Stop.
[15:17:51] openhabian@openHABianPi:~/arping-arping-2.19$ sudo make install
make: *** No rule to make target 'install'. Stop.
[15:17:59] openhabian@openHABianPi:~/arping-arping-2.19$
There is a conflict between these 2 packages options that can cause network trouble with ease.
iputils-arping use the option "-w" for timeout in second whereas arping use the same option for timeout in microseconds.
Installing a pgpool cluster (for example) from Ubuntu universe repository use by default the arping cmd for the gratuitous ARP Virtual IP.
arping_cmd = 'arping -U $IP$ -w 1'
Using by default the arping package instead of iputils-arping can cause serious trouble to you network (tremendous layer2 broadcast).
A quick fix could be switching the -W (second) and -w flag (microsecond) on arping package.
Seems to be a good idea to harmonize the flags for those 2 similar packages ?
Possible future feature.
MacOSX keeps unconfigured wireless interfaces UP, tricking arping when pinging MAC address.
Conditions for failure:
pcap_lookupdev()
. (appears alphabetically before the desired interface)-S
not specified.-i
not specified.When pinging MAC address getifaddrs()
can't be used to automatically find the interface, and it'll fall back to pcap_lookupdev()
.
If pcap_lookupdev()
returns an interface without an address configured (e.g. wireless interface on MacOSX) arping will fail to get the configured IP adress and fail.
Workaround is to specify -S
or -i
, but -S
will just set the source address and still probably use the wrong interface.
Should arping in this case try to find another interface to use?
Seems like a feature that might as well be in there.
Hi!
I'm attempting to package arping for GNU Guix and am running into a failure upon make check
:
starting phase `check'
Making check in src
make[1]: Entering directory '/tmp/guix-build-arping-2.21.drv-0/arping-2.21/src'
make arping_test
make[2]: Entering directory '/tmp/guix-build-arping-2.21.drv-0/arping-2.21/src'
gcc -DHAVE_CONFIG_H -I. -I.. -D_DEFAULT_SOURCE=1 -g -O2 -MT arping_test.o -MD -MP -MF .deps/arping_test.Tpo -c -o arping_test.o arping_test.c
In file included from arping_test.c:29:0:
arping_test.c:239:8: error: ‘test_mkpacket’ redeclared as different kind of symbol
MYTEST(test_mkpacket)
^
arping_test.c:239:1: note: in expansion of macro ‘MYTEST’
MYTEST(test_mkpacket)
^~~~~~
arping_test.c:239:8: note: previous declaration of ‘test_mkpacket’ was here
MYTEST(test_mkpacket)
^
arping_test.c:58:31: note: in definition of macro ‘MYTEST’
#define MYTEST(a) static void a(int);__attribute__((constructor)) \
^
In file included from arping_test.c:29:0:
arping_test.c:264:8: error: ‘pingip_uninteresting_packet’ redeclared as different kind of symbol
MYTEST(pingip_uninteresting_packet)
^
arping_test.c:264:1: note: in expansion of macro ‘MYTEST’
MYTEST(pingip_uninteresting_packet)
^~~~~~
arping_test.c:264:8: note: previous declaration of ‘pingip_uninteresting_packet’ was here
MYTEST(pingip_uninteresting_packet)
^
arping_test.c:58:31: note: in definition of macro ‘MYTEST’
#define MYTEST(a) static void a(int);__attribute__((constructor)) \
^
In file included from arping_test.c:29:0:
arping_test.c:392:8: error: ‘pingip_interesting_packet’ redeclared as different kind of symbol
MYTEST(pingip_interesting_packet)
^
arping_test.c:392:1: note: in expansion of macro ‘MYTEST’
MYTEST(pingip_interesting_packet)
^~~~~~
arping_test.c:392:8: note: previous declaration of ‘pingip_interesting_packet’ was here
MYTEST(pingip_interesting_packet)
^
arping_test.c:58:31: note: in definition of macro ‘MYTEST’
#define MYTEST(a) static void a(int);__attribute__((constructor)) \
^
In file included from arping_test.c:29:0:
arping_test.c:452:8: error: ‘strip_newline_test’ redeclared as different kind of symbol
MYTEST(strip_newline_test)
^
arping_test.c:452:1: note: in expansion of macro ‘MYTEST’
MYTEST(strip_newline_test)
^~~~~~
arping_test.c:452:8: note: previous declaration of ‘strip_newline_test’ was here
MYTEST(strip_newline_test)
^
arping_test.c:58:31: note: in definition of macro ‘MYTEST’
#define MYTEST(a) static void a(int);__attribute__((constructor)) \
^
In file included from arping_test.c:29:0:
arping_test.c:472:8: error: ‘get_mac_addr_success’ redeclared as different kind of symbol
MYTEST(get_mac_addr_success)
^
arping_test.c:472:1: note: in expansion of macro ‘MYTEST’
MYTEST(get_mac_addr_success)
^~~~~~
arping_test.c:472:8: note: previous declaration of ‘get_mac_addr_success’ was here
MYTEST(get_mac_addr_success)
^
arping_test.c:58:31: note: in definition of macro ‘MYTEST’
#define MYTEST(a) static void a(int);__attribute__((constructor)) \
^
In file included from arping_test.c:29:0:
arping_test.c:504:8: error: ‘get_mac_addr_fail’ redeclared as different kind of symbol
MYTEST(get_mac_addr_fail)
^
arping_test.c:504:1: note: in expansion of macro ‘MYTEST’
MYTEST(get_mac_addr_fail)
^~~~~~
arping_test.c:504:8: note: previous declaration of ‘get_mac_addr_fail’ was here
MYTEST(get_mac_addr_fail)
^
arping_test.c:58:31: note: in definition of macro ‘MYTEST’
#define MYTEST(a) static void a(int);__attribute__((constructor)) \
^
In file included from arping_test.c:29:0:
arping_test.c:520:14: error: ‘libnet_init_bad_nolo’ redeclared as different kind of symbol
MY_EXIT_TEST(libnet_init_bad_nolo)
^
arping_test.c:520:1: note: in expansion of macro ‘MY_EXIT_TEST’
MY_EXIT_TEST(libnet_init_bad_nolo)
^~~~~~~~~~~~
arping_test.c:520:14: note: previous declaration of ‘libnet_init_bad_nolo’ was here
MY_EXIT_TEST(libnet_init_bad_nolo)
^
arping_test.c:65:37: note: in definition of macro ‘MY_EXIT_TEST’
#define MY_EXIT_TEST(a) static void a(int);__attribute__((constructor)) \
^
In file included from arping_test.c:29:0:
arping_test.c:528:14: error: ‘libnet_init_null_nolo_nonull’ redeclared as different kind of symbol
MY_EXIT_TEST(libnet_init_null_nolo_nonull)
^
arping_test.c:528:1: note: in expansion of macro ‘MY_EXIT_TEST’
MY_EXIT_TEST(libnet_init_null_nolo_nonull)
^~~~~~~~~~~~
arping_test.c:528:14: note: previous declaration of ‘libnet_init_null_nolo_nonull’ was here
MY_EXIT_TEST(libnet_init_null_nolo_nonull)
^
arping_test.c:65:37: note: in definition of macro ‘MY_EXIT_TEST’
#define MY_EXIT_TEST(a) static void a(int);__attribute__((constructor)) \
^
In file included from arping_test.c:29:0:
arping_test.c:535:8: error: ‘libnet_init_good’ redeclared as different kind of symbol
MYTEST(libnet_init_good)
^
arping_test.c:535:1: note: in expansion of macro ‘MYTEST’
MYTEST(libnet_init_good)
^~~~~~
arping_test.c:535:8: note: previous declaration of ‘libnet_init_good’ was here
MYTEST(libnet_init_good)
^
arping_test.c:58:31: note: in definition of macro ‘MYTEST’
#define MYTEST(a) static void a(int);__attribute__((constructor)) \
^
In file included from arping_test.c:29:0:
arping_test.c:542:8: error: ‘libnet_init_null_nolo’ redeclared as different kind of symbol
MYTEST(libnet_init_null_nolo)
^
arping_test.c:542:1: note: in expansion of macro ‘MYTEST’
MYTEST(libnet_init_null_nolo)
^~~~~~
arping_test.c:542:8: note: previous declaration of ‘libnet_init_null_nolo’ was here
MYTEST(libnet_init_null_nolo)
^
arping_test.c:58:31: note: in definition of macro ‘MYTEST’
#define MYTEST(a) static void a(int);__attribute__((constructor)) \
^
arping_test.c:239:8: warning: ‘test_mkpacket’ used but never defined
MYTEST(test_mkpacket)
^
arping_test.c:58:31: note: in definition of macro ‘MYTEST’
#define MYTEST(a) static void a(int);__attribute__((constructor)) \
^
arping_test.c:264:8: warning: ‘pingip_uninteresting_packet’ used but never defined
MYTEST(pingip_uninteresting_packet)
^
arping_test.c:58:31: note: in definition of macro ‘MYTEST’
#define MYTEST(a) static void a(int);__attribute__((constructor)) \
^
arping_test.c:392:8: warning: ‘pingip_interesting_packet’ used but never defined
MYTEST(pingip_interesting_packet)
^
arping_test.c:58:31: note: in definition of macro ‘MYTEST’
#define MYTEST(a) static void a(int);__attribute__((constructor)) \
^
arping_test.c:452:8: warning: ‘strip_newline_test’ used but never defined
MYTEST(strip_newline_test)
^
arping_test.c:58:31: note: in definition of macro ‘MYTEST’
#define MYTEST(a) static void a(int);__attribute__((constructor)) \
^
arping_test.c:472:8: warning: ‘get_mac_addr_success’ used but never defined
MYTEST(get_mac_addr_success)
^
arping_test.c:58:31: note: in definition of macro ‘MYTEST’
#define MYTEST(a) static void a(int);__attribute__((constructor)) \
^
arping_test.c:504:8: warning: ‘get_mac_addr_fail’ used but never defined
MYTEST(get_mac_addr_fail)
^
arping_test.c:58:31: note: in definition of macro ‘MYTEST’
#define MYTEST(a) static void a(int);__attribute__((constructor)) \
^
arping_test.c:520:14: warning: ‘libnet_init_bad_nolo’ used but never defined
MY_EXIT_TEST(libnet_init_bad_nolo)
^
arping_test.c:65:37: note: in definition of macro ‘MY_EXIT_TEST’
#define MY_EXIT_TEST(a) static void a(int);__attribute__((constructor)) \
^
arping_test.c:528:14: warning: ‘libnet_init_null_nolo_nonull’ used but never defined
MY_EXIT_TEST(libnet_init_null_nolo_nonull)
^
arping_test.c:65:37: note: in definition of macro ‘MY_EXIT_TEST’
#define MY_EXIT_TEST(a) static void a(int);__attribute__((constructor)) \
^
arping_test.c:535:8: warning: ‘libnet_init_good’ used but never defined
MYTEST(libnet_init_good)
^
arping_test.c:58:31: note: in definition of macro ‘MYTEST’
#define MYTEST(a) static void a(int);__attribute__((constructor)) \
^
arping_test.c:542:8: warning: ‘libnet_init_null_nolo’ used but never defined
MYTEST(libnet_init_null_nolo)
^
arping_test.c:58:31: note: in definition of macro ‘MYTEST’
#define MYTEST(a) static void a(int);__attribute__((constructor)) \
^
make[2]: *** [Makefile:627: arping_test.o] Error 1
This is using GCC 7, check 0.14, libnet 1.2. I tried check 0.13 and libnet 1.1, but it made no difference. Any idea what I'm doing wrong?
Hello,
I am in the task of cross compiling Arping for host arm-none-linux-gnueabi, when trying to do that libnet and libpcap were required as dependencies so I did the follow:
I download libpcap-1.9.0 and configure as follow:
./configure --build=x86_64-pc-linux-gnu --host=arm-none-linux-gnueabi --prefix=/home/uid32119/arping/libpcap-1.9.0/outp --disable-shared --enable-static
then make.
Now, when trying to cross compile Arping again, I am receiving multiple declarations errors as:
arm-none-linux-gnueabi-gcc -DHAVE_CONFIG_H -I. -I.. -I/home/uid32119/arping/libnet-master/libnet/include -I/home/uid32119/arping/libpcap-1.9.0/pcap -D_DEFAULT_SOURCE=1 -g -O2 -MT arping.o -MD -MP -MF .deps/arping.Tpo -c -o arping.o arping.c
In file included from arping.c:111:0:
/home/uid32119/arping/libpcap-1.9.0/pcap/pcap.h:523:18: error: conflicting types for 'bpf_filter'
PCAP_API u_int bpf_filter(const struct bpf_insn *, const u_char *, u_int, u_int);
^
In file included from /home/uid32119/arping/libpcap-1.9.0/pcap/pcap.h:88:0,
from arping.c:111:
/home/uid32119/arping/libnet-master/libnet/include/bpf.h:260:14: note: previous declaration of 'bpf_filter' was here
extern u_int bpf_filter(struct bpf_insn *, u_char *, u_int, u_int);
^
Makefile:613: recipe for target 'arping.o' failed
So I decided to comment /home/uid32119/arping/libpcap-1.9.0/pcap/pcap.h:523 as:
#if !defined(NetBSD) && !defined(QNX)
// PCAP_API u_int bpf_filter(const struct bpf_insn *, const u_char *, u_int, u_int);
#endif
But again, multiple declaration errors arrives:
/home/uid32119/arping/libpcap-1.9.0/.libs/libpcap.a(pcap.o): In function pcap_lookupdev': /home/uid32119/arping/libpcap-1.9.0/./pcap.c:1258: multiple definition of pcap_lookupdev'
mock_libpcap.o:/home/uid32119/arping/arping-arping-2.x/src/mock_libpcap.c:67: first defined here
/home/uid32119/arping/libpcap-1.9.0/.libs/libpcap.a(pcap.o): In function pcap_dispatch': /home/uid32119/arping/libpcap-1.9.0/./pcap.c:2564: multiple definition of pcap_dispatch'
mock_libpcap.o:/home/uid32119/arping/arping-arping-2.x/src/mock_libpcap.c:21: first defined here
/
.
.
.
This is how I configured for Arping:
./configure --build=x86_64-pc-linux-gnu --host=arm-none-linux-gnueabi --prefix=/home/uid32119/arping/arping-arping-2.x/ LDFLAGS="-L/home/uid32119/arping/libnet-master/libnet/src/.libs -L/home/uid32119/arping/libpcap-1.9.0/.libs" CPPFLAGS="-I/home/uid32119/arping/libnet-master/libnet/include -I/home/uid32119/arping/libpcap-1.9.0"
/home/uid32119/arping/libpcap-1.9.0/.libs
is just a folder I create to have libpcap.a by itself.
I feel like I am doing something wrong in configure step, maybe you are able to tell me if I am using wrong configure?
Best Regards!
PD: config.log
from arping added
config.log
The calculation of the number of lost packets is off by one. Here's a demonstration:
$ sudo arping -i en1 192.168.1.1 ARPING 192.168.1.1 ^C --- 192.168.1.1 statistics --- 1 packets transmitted, 0 packets received, 100% unanswered (0 extra)
What happens here is that I quit ARPing before it could receive the last response 'out in the air'. The calculation error is actually quite significant, as even for 1 packet out of 10, ARPing would show a 10% loss that actually isn't there.
For the calculation of the unanswered packets, ARPing shouldn't account for the last packet that is out in the air.
I am using ARPing 2.09 on OSX (via MacPorts).
Thank you in advance for considering this ticket.
Hi,
I was trying to find cpe_uri associated with this package in NIST/NVD so that COS (https://cloud.google.com/container-optimized-os/docs) can track security vulnerabilities associated with it. However, based on the search there was no cpe_uri associated.
Could you help in providing information as what cpe_uri can be used by downstream users to track security vulnerability in this package from NIST/NVD?
Often I have a unknown router to fix. I connect the router via a cable to an external switch to my Debian machine. I use netdiscover to obtain the current IP address, but it works only after several router turn off and ons. Can I use arping for this task? I know the MAC address of the router (plate on the backside) and because of its the same Ethernet segment it should be possible? But I always get timeout as answer:
arping -c 4 -b -i eth0 00:11:22:33:44:55
arping -c 4 -B -i eth0 00:11:22:33:44:55
arping -c 4 -0 -i eth0 00:11:22:33:44:55
root@Debian:~# arping -c 4 -i eth0 00:11:22:33:44:55
arping: clock_getres() = 0 1
arping: libnet_init(eth0)
arping: libnet_init(eth0)
arping: Successfully chrooted to /var/run/sshd
arping: Successfully dropped uid/gid to 65534/65534.
arping: pcap_get_selectable_fd(): 4
This box: Interface: eth0 IP: 192.168.1.2 MAC address: 00:11:22:33:44:55
ARPING 00:11:22:33:44:55
arping: sending packet at time 13129.152552669
Timeout
arping: sending packet at time 13130.153587683
Timeout
arping: sending packet at time 13131.154612564
Timeout
arping: sending packet at time 13132.155633321
Timeout
--- 00:11:22:33:44:55 statistics ---
4 packets transmitted, 0 packets received, 100% unanswered (0 extra)
In your FAQ, you say that /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts
has to be 0 to get answers. I looked at several routers and they all are set to 1. I put a 0 into it on one of my routers and restarted /etc/init.d/network restart
and tried arping, but its still timeout.
So I cannot use arping for my problem?
So we don't need the scanner script.
Like iputils arping -A.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.