| 
 | 
 
 
发表于 2006-3-30 19:58:03
|
显示全部楼层
 
 
 
[code]*/ 
 
#include  
#include  
#include  
#include  
#include  
#include  
#include  
#include  
#include  
#include  
 
#define ETH_HW_ADDR_LEN 6 
#define IP_ADDR_LEN 4 
#define ARP_FRAME_TYPE 0x0806 
#define ETHER_HW_TYPE 1 
#define IP_PROTO_TYPE 0x0800 
#define OP_ARP_REQUEST 2 
 
#define DEFAULT_DEVICE "eth0" 
 
char usage[]={"send_arp: sends out custom ARP packet. yuri volobuev'97\n\ 
\tusage: send_arp src_ip_addr src_hw_addr targ_ip_addr tar_hw_addr\n\n"}; 
 
struct arp_packet { 
        u_char targ_hw_addr[ETH_HW_ADDR_LEN]; 
        u_char src_hw_addr[ETH_HW_ADDR_LEN]; 
        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 sndr_hw_addr[ETH_HW_ADDR_LEN]; 
        u_char sndr_ip_addr[IP_ADDR_LEN]; 
        u_char rcpt_hw_addr[ETH_HW_ADDR_LEN]; 
        u_char rcpt_ip_addr[IP_ADDR_LEN]; 
        u_char padding[18]; 
}; 
 
void die(char *); 
void get_ip_addr(struct in_addr*,char*); 
void get_hw_addr(char*,char*); 
 
int main(int argc,char** argv){ 
 
struct in_addr src_in_addr,targ_in_addr; 
struct arp_packet pkt; 
struct sockaddr sa; 
int sock; 
 
if(argc != 5)die(usage); 
 
sock=socket(AF_INET,SOCK_PACKET,htons(ETH_P_RARP)); 
if(socks_addr=inet_addr(str); 
if(in_addr->s_addr == -1){ 
        if( (hostp = gethostbyname(str))) 
                bcopy(hostp->h_addr,in_addr,hostp->h_length); 
        else { 
                fprintf(stderr,"send_arp: unknown host %s\n",str); 
                exit(1); 
                } 
        } 
} 
 
void get_hw_addr(char* buf,char* str){ 
 
int i; 
char c,val; 
 
for(i=0;i= 'a' && c |   
 
 
 
 |