#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <sys/ioctl.h>
#include <net/if.h>
#include <netinet/if_ether.h>
#include <net/if_arp.h>
#include <stdlib.h>
#include <stdio.h>
#include <errno.h>
#include <ctype.h>
#include <fcntl.h>
#include <string.h>
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h> /* hpux中必需要 */
#include <arpa/inet.h>
#include <unistd.h>
#include <fcntl.h> /* fcntl */
#include <string.h> /* strerror */
#include <errno.h> /* errno */
#include <sys/time.h> /* select */
#include <sys/sockio.h>
static int sd;
static int arp_del(char* ip)
{
struct arpreq arpreq;
struct sockaddr_in *sin;
struct in_addr ina;
int rc;
printf("del arp entry for IP : %s\n", ip);
memset(&arpreq, 0, sizeof(struct arpreq));
sin = (struct sockaddr_in *) &arpreq.arp_pa;
memset(sin, 0, sizeof(struct sockaddr_in));
sin->sin_family = AF_INET;
ina.s_addr = inet_addr(ip);
memcpy(&sin->sin_addr, (char *)&ina, sizeof(struct in_addr));
rc = ioctl(sd, SIOCDARP, &arpreq);
if (rc < 0)
{
printf("del arp error%d\n",rc);
return -1;
}
else
{
printf("del arp success%d\n",rc);
}
return 0;
}
int main(int argc, char **argv)
{
sd = socket(AF_INET, SOCK_DGRAM, 0);
if (sd < 0)
{
puts("socket() error\n");
exit(1);
}
arp_del(argv[1]);
close(sd);
return 0;
}