本帖最后由 nihaojiayu 于 2011-06-07 10:33:36 编辑

先说一下相关的“废话”:

近来学校宿舍楼ARP攻击一直很猖獗,而且大多数是主机欺骗型ARP攻击。每次攻击都要至少半天整栋宿舍楼上不去网(我们这边每栋宿舍楼划分一个网段,像我们楼就是10.1..23.254/22)。我曾经抓到过ARP攻击数据包,局域网遭受攻击的时候被我逮了个正着:某台主机广播一个ARP数据包,内容是10.1.23.254 is at xxxxxxxx(即错误的网关MAC,我们的网关是10.1.23.254),然后整栋楼就断网大半天。

没有办法,绝大部分人不懂MAC绑定,没有主动防御意识。我自己绑定了MAC只能保护自己,却只能眼睁睁看着局域网瘫痪。这不端午放假前一天的晚上又被攻击,然而网络中心的管理员都放假了,我们一下就断网3天!

我真的怒了!

偶尔看到百度百科上ARP那一词条上,作者推荐了一个叫做“欣向全ARP工具”的东西,说是具有主动维护功能,就是向网内广播正确的网关与MAC地址。我觉的这个功能挺好,就下载下来试了试。那是WIN下的软件,我平时都是用Ubuntu,只好在同学机器上试,反正都上不去网,就死马当作活马医吧。没想到那个破烂玩意儿在使用其他任何功能之前,都必须扫描网络。我想扫就扫吧,反正很快(Linux下用nmap扫描10.1.23.254/22 的网段半分钟左右就OK了)。没想到那破东西居然明知道我的网段,却硬是从10.0.0.0扫描到10.254.254.254!!还扫了将近1个小时!终于扫描完成了啊,我就迫不及待用那个“主动维护”功能呐,没想到它不让自己填写网关跟MAC,还弹出窗口说自己找不到MAC(废话嘛,估计它是要读ARP表。都受ARP攻击了,ARP表里面就算有网关对应的MAC也不是间的是正确的啊,真不知这作者怎么设计的!),那我就手动绑定MAC吧(我知道正确的MAC地址,因为网络中心的网站上都公布这些信息的。),没想到同学那WIN7也不知道怎么的就不让绑定,用管理员权限运行CMD也不行,写个批处理也不行!我无奈,只好重启系统,可是再次打开那个破烂工具,它却说还要再扫描一次!!

我已经出离愤怒了!每次运行都要扫描,每次扫描都要一个小时的话,局域网早就瘫了,还维护个P啊!

后来有发现我那个网络接口不管用了,没信号(不是同学扫描局域网那台机器,而是那台机器上网的网口!一个宿舍才俩网口啊!大家都是用交换机的,XD!)那是被网络中心给封了啊!!估计扫描的时候流量太大了,它扫的本来就慢,还扫那么多,我只好开最大速度扫描(本以为网络中心放假呢,难道它们写了脚本自动封掉超流量端口?!可恶的是封端口,封一个MAC就行了嘛!),我都想直接找百度百科那个ARP词条作者去理论了!神马破烂玩意儿都往百科上放!!

我还知道一些P2P软件可以发这种东西,都是WIN下的,但是害怕不安全,怕被人发现痕迹(虽说想做好事儿,但是手段毕竟有点hack)。就罢手Windows了,自己在Linux下来写!

首先,我写这个东西不是想做坏事儿的,也希望看到这篇博客的朋友不要拿去做坏事儿!

我只给出实现最基本功能的代码,稍微修改一下还可以实现好多其他的功能(我所在局域网的网关是10.1.23.254,其MAC地址为00:1c:f9:6a:4c:00)

下面是代码:(sendarp.c)

#include

#include

int main()

{

int res;

/*********init paras*****************/

libnet_t *l;/*****libnet handler*/

libnet_ptag_t p_tag;

char *device="eth0";

char err_buff[LIBNET_ERRBUF_SIZE];

char *src_ip_str="10.1.23.254";

char *dest_ip_str="0.0.0.0";

u_char src_mac[6]={0x00,0x1c,0xf9,0x6a,0x4c,0x00};

u_char dest_mac[6]={0xff,0xff,0xff,0xff,0xff,0xff};

u_long src_ip;

u_long dest_ip;

src_ip=libnet_name2addr4(l,src_ip_str,LIBNET_RESOLVE);

dest_ip=libnet_name2addr4(l,dest_ip_str,LIBNET_RESOLVE);

/**********init libnet*****************/

l=libnet_init(

LIBNET_LINK_ADV,

device,

err_buff

);

if(l==NULL)

{

printf("libnet_init err!n");

fprintf(stderr,"%s",err_buff);

exit(0);

}

/**********build arp packet************/

p_tag=libnet_build_arp(

ARPHRD_ETHER,/*hardware type ethernet*/

ETHERTYPE_IP,/*protocol type*/

6,/*length of mac*/

4,/*length of IP*/

ARPOP_REPLY,/*ARP operation type*/

src_mac,

(u_int8_t*) &src_ip,

dest_mac,

(u_int8_t*) &dest_ip,

NULL,/*payload*/

0,/*payload size*/

l,/*libnet handler*/

0/*'0' stands out building a new packet*/

);

if(p_tag==-1)

{

printf("libnet_build_arp err!n");

exit(0);

}

/***********build ethernet packet header*************/

p_tag=libnet_build_ethernet(

dest_mac,

src_mac,

ETHERTYPE_ARP,

NULL,

0,

l,

0

);

if(p_tag==-1)

{

printf("libnet_build_ethernet err!n");

exit(0);

}

/*********send packets*******************************/

for(;;)

{

if((res=libnet_write(l))==-1)

{

printf("libnet_write err!n");

exit(0);

}

printf("arp packet has been sentn");

sleep(1);

}

/*********over and destroy**************************/

libnet_destroy(l);

return 0;

}

终端里编译:gcc -o sendarp sendarp.c -lnet

运行(root权限才可以):./sendarp

运行时抓包:

[img=http://t2.qpic.cn/mblogpic/4673103d6a8ce0219ff4/460][/img]

PS:1、上述代码总体在Windows下可用,只是包含头文件的方式有所不同,有兴趣的朋友可以研究一下windows下libnet的安装、配置与使用。

2、代码中第9行:char *device="eth0",是指Linux下默认的有线网络接口,如果把“eth0"换做"wlan0"则是默认的无线网络接口。其实我是在无线网络下测试的(怕影响有线局域网),所以才有那么一堆不对应网关为10.1.23.254的IP地址。

转自:http://blog.csdn.net/nihaojiayu/archive/2011/06/07/6528746.aspx

libnet发包java语言_Linux下C语言+libnet实现ARP数据包广播相关推荐

  1. linux c t添加arp表,Ubuntu下C语言+libnet实现ARP数据包广播

    近来学校宿舍楼ARP攻击一直很猖獗,而且大多数是主机欺骗型ARP攻击.每次攻击都要至少半天整栋宿舍楼上不去网(我们这边每栋宿舍楼划分一个网段,像我们楼就是10.1..23.254/22).我曾经抓到过 ...

  2. R语言系列:datasets(R自带数据包)

     R语言系列:datasets(R自带数据包) 向量 euro    #欧元汇率,长度为11,每个元素都有命名 landmasses    #48个陆地的面积,每个都有命名 precip    # ...

  3. libnet发包java语言_Libnet11手动构建IPv6数据包

    我正在尝试使用 Libnet11 函数: int libnet_write_raw_ipv6 (libnet_t *l, u_int8_t *packet, u_int32_t size) 在网络层注 ...

  4. gcc编译c文件_Linux下C语言程序的编译过程

    Linux下C语言程序的编译过程 使用gcc编译程序时,编译工程分为4个阶段: (1)预处理:(Pre-Processing) (2)编译:(Compiling) (3)汇编:(Assembling) ...

  5. c语言代码 linux 关机_linux下c语言关机程序

    linux下c语言关机程序 /* Offtimer.c.For auto halt. */ #include #include #include #define DELAY 60/* Time of ...

  6. 半双工通信是指c语言,Linux下C语言实现半双工的UDP通信

    ------------恢复内容开始------------ Linux下C语言实现半双工的UDP通信 1.单向通信:又称为单工通信,即只能有一个方向的通信而没有反方向的交互.无线电广播或有线电广播以 ...

  7. linux改环境语言,linux下改变语言环境

    1.查看当前语言变量值 $ locale 2.查看系统内安装的语言 $ locale -a 3.临时修改语言值 $ export LC_ALL=en_US.UTF-8 $ export LANGUAG ...

  8. linux java执行_linux下运行java

    3. 编译运行命令 编译 javac [-d] [-o] [-verbose] [-classpath][-sourcepath] -d, 指定生成的.class文件存放目录,一般省略则默认放在jav ...

  9. 1、Linux下C语言 编写简单的网络嗅探器: 基本的数据包抓取分析

    首先贴上源代码 #include <stdio.h> #include <errno.h> #include <unistd.h> #include <sys ...

最新文章

  1. python内置模块大全 processon
  2. NLP领域“学霸”太多,一年前标准已过时,新跑分标准SuperGLUE出炉
  3. jq点击按钮打开和关闭弹出层,点击除了当前按钮以外的地方关闭弹出层
  4. python bytes()函数
  5. Maven plugin - maven-dependency-plugin
  6. make工具和Makefile基础语法(含有交叉编译、pthread_create()的处理)
  7. Hello Blazor:(7)WebAssembly、Server模式你选哪种?小孩子才做选择!我用混合模式...
  8. 晨哥真有料丨聊天就在一起了,真有这么简单吗?
  9. directx和opengl 电子白板
  10. 在线URL转sitemap工具
  11. 项目移植过程中报:“Project facet Java version 1.7 is not supported.” 错误
  12. 高性能WEB开发:DOM编程
  13. linux合并ts文件吗,Linux 下使用 ffmpeg 大批量合并 ts 文件, mp4切割文件为m3u8
  14. .frx文件扩展的细节-文件扩展名 数据库
  15. PCQQ - 发送自定义的XML卡片消息
  16. NOIP2015普及组复赛T4——推销员
  17. AdxMenu真的不错!我写了个中文的使用说明如下,希望大家用得着
  18. 移动应用程序开发_移动应用程序开发生命周期-从开发到应用程序商店的应用程序之旅
  19. 淘宝个人卖家如何进行免登声明
  20. 解决html在手机和PC端显示效果不一致的问题

热门文章

  1. H3C网络设备配置命令大全(持续更新)
  2. 用C语言输出图形问题
  3. 选择恐惧症与产品设计
  4. Windows装机必备搜索工具Search Everything
  5. android 图表控件的实现(一)
  6. 润乾报表 -根据登录用户控制报表展现效果(动态宏)
  7. 网络警察 (哈希表)
  8. selenium控制日历控件
  9. 【数据分析报告】中国上海电动汽车行驶和充电行为分析
  10. mouseenter事件java_从子元素输入父元素时,不会触发MouseEnter事件