#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; }