From 128f399117efa9a972e5c22e2fd3fb14a4e37554 Mon Sep 17 00:00:00 2001 From: Thomas Habets Date: Wed, 3 Oct 2012 23:58:48 +0100 Subject: Test -A with pingip --- src/arping.c | 4 ++-- src/arping.h | 2 ++ src/arping_test.c | 43 +++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 47 insertions(+), 2 deletions(-) diff --git a/src/arping.c b/src/arping.c index 267dc62..efff12a 100644 --- a/src/arping.c +++ b/src/arping.c @@ -135,7 +135,7 @@ uint32_t dstip; * Ping IP mode: ethxmas, override with -t * Ping MAC mode: cmdline target */ -static uint8_t dstmac[ETH_ALEN]; +uint8_t dstmac[ETH_ALEN]; uint32_t srcip; /* autodetected, override with -S/-b/-0 */ static uint8_t srcmac[ETH_ALEN]; /* autodetected, override with -s */ @@ -143,7 +143,7 @@ static uint8_t srcmac[ETH_ALEN]; /* autodetected, override with -s */ static int beep = 0; /* beep when reply is received. -a */ static int reverse_beep = 0; /* beep when expected reply absent. -e */ static int alsototal = 0; /* print sent as well as received. -u */ -static int addr_must_be_same = 0; /* -A */ +int addr_must_be_same = 0; /* -A */ static int finddup = 0; /* finddup mode. -d */ static int dupfound = 0; /* set to 1 if dup found */ diff --git a/src/arping.h b/src/arping.h index 1f66277..799a26d 100644 --- a/src/arping.h +++ b/src/arping.h @@ -33,6 +33,8 @@ extern uint32_t srcip; extern uint32_t dstip; extern unsigned int numrecvd; extern unsigned int numsent; +extern int addr_must_be_same; +extern uint8_t dstmac[]; const char * arping_lookupdev(uint32_t srcip, uint32_t dstip, char *ebuf); diff --git a/src/arping_test.c b/src/arping_test.c index 6a81ed3..81ed576 100644 --- a/src/arping_test.c +++ b/src/arping_test.c @@ -332,6 +332,48 @@ START_TEST(pingip_interesting_packet) free(packet); } END_TEST +/** + * Test that -A functionality works. + */ +START_TEST(pingip_flag_A) +{ + struct pcap_pkthdr pkthdr; + int prev_numrecvd = numrecvd; + addr_must_be_same = 1; + + dstip = htonl(0x12345678); + + uint8_t* packet = mkpacket(&pkthdr); + + struct captured_output *sout; + + // Wrong MAC. + sout = capture(1); + pingip_recv(NULL, &pkthdr, packet); + stop_capture(sout); + fail_unless(numrecvd == prev_numrecvd, + "numrecvd changed"); + fail_unless(!strcmp(sout->buffer, ""), + sout->buffer); + uncapture(sout); + + // Right MAC. + const char* correct = + "60 bytes from 77:88:99:aa:bb:cc (18.52.86.120): " + "index=0 time="; + memcpy(dstmac, packet + LIBNET_ETH_H + LIBNET_ARP_H, 6); + sout = capture(1); + pingip_recv(NULL, &pkthdr, packet); + stop_capture(sout); + fail_unless(numrecvd == prev_numrecvd + 1, + "numrecvd not incremented"); + fail_unless(!strncmp(sout->buffer, correct, strlen(correct)), + sout->buffer); + uncapture(sout); + + free(packet); +} END_TEST + /** * Set up test suite. */ @@ -346,6 +388,7 @@ arping_suite (void) tcase_add_test(tc_core, test_mkpacket); tcase_add_test(tc_core, pingip_uninteresting_packet); tcase_add_test(tc_core, pingip_interesting_packet); + tcase_add_test(tc_core, pingip_flag_A); suite_add_tcase(s, tc_core); return s; } -- cgit v1.2.1