查找自己的网卡:

 #include <libnet.h>
#include <stdio.h>
#include <iostream> #pragma comment(lib, "libnet.lib")
#pragma comment(lib, "wsock32.lib") int main(int argc, char **argv)
{
pcap_if_t *alldevs;
pcap_if_t *d;
int inum;
int i=;
pcap_t *adhandle;
char errbuf[PCAP_ERRBUF_SIZE]; /* Retrieve the device list */
if (pcap_findalldevs(&alldevs, errbuf) == -)
{
fprintf(stderr,"Error in pcap_findalldevs: %s\n", errbuf);
exit();
} /* Print the list */
for(d=alldevs; d; d=d->next)
{
printf("%d. %s", ++i, d->name);
if (d->description)
printf(" (%s)\n", d->description);
else
printf(" (No description available)\n");
} if(i==)
{
printf("\nNo interfaces found! Make sure WinPcap is installed.\n");
return -;
} printf("Enter the interface number (1-%d):",i);
scanf("%d", &inum);
cin.get(); if(inum < || inum > i)
{
printf("\nInterface number out of range.\n");
/* Free the device list */
pcap_freealldevs(alldevs);
cout << "press ENTER to Exit";
cin.get();
return -;
} /* Jump to the selected adapter */
for(d=alldevs, i=; i< inum- ;d=d->next, i++); char *device = NULL;//设备名字,此时为NULL
device=d->name;
l=libnet_init(LIBNET_LINK,device,error_inf);
//。。。 。。。 return ;
}

发送ARP reply:

转载:http://blog.csdn.net/qq372895101/article/details/13769631

参考:http://bbs.csdn.net/topics/360266138

注:将"eth0"替换成上面找到的d->name;

#include <stdio.h>
#include <libnet.h>
#define MAC_ADDR_LEN 6
#define IP_ADDR_LEN 4
//向同一网络内所有机器发送ARP REPLY包,告诉他们,23.23.23.2在00:df:17:17:17:f2那里 int main(int argc, char *argv[])
{
libnet_t *l = NULL; // libnet context char *device = "eth0";
char err_buf[LIBNET_ERRBUF_SIZE];
libnet_ptag_t p_tag;
unsigned char src_mac[MAC_ADDR_LEN]//自己机器的MAC地址
= {0x00, 0xdf, 0x17, 0x17, 0x17, 0xf2};
unsigned char dest_mac[MAC_ADDR_LEN]
= {0xff, 0xff, 0xff, 0xff, 0xff, 0xff};
char *src_ip_str = "23.23.23.2";
unsigned long src_ip, dest_ip = ;
src_ip = libnet_name2addr4(l, src_ip_str, LIBNET_RESOLVE); // create libnet environment l = libnet_init(LIBNET_LINK_ADV, device, err_buf);
if(!l)
printf("libnet_init error\n"), exit();
//构造ARP数据包 p_tag = libnet_build_arp( // construct arp packet
ARPHRD_ETHER, // hardware type ethernet
ETHERTYPE_IP, // protocol type
MAC_ADDR_LEN, // mac length
IP_ADDR_LEN, // protocol length
ARPOP_REPLY, // op type
(u_int8_t*)src_mac, // source mac addr这里作用是更新目的地的ARP表 IP-MAC
(u_int8_t*)&src_ip, // source ip addr
(u_int8_t*)dest_mac, // dest mac addr
(u_int8_t*)&dest_ip, // dest ip addr
NULL, // payload
, // payload length
l, // libnet context
//0 stands to build a new one
);
if(- == p_tag)
printf("libnet_build_arp error\n"), exit();
//以太网头部 p_tag = libnet_build_ethernet( // create ethernet header
(u_int8_t*)dest_mac, // dest mac addr
(u_int8_t*)src_mac, // source mac addr这里说明你链路层的源MAC地址,如果改了可以伪装自己
ETHERTYPE_ARP, // protocol type
NULL, // payload
, // payload length
l, // libnet context
// 0 to build a new one
);
if(- == p_tag)
printf("libnet_build_ethernet error!\n"), exit();
int res;
if(- == (res = libnet_write(l)))
printf("libnet_write error!\n"), exit();
libnet_destroy(l);
return ;
}

send arp 也可以:

  /*********send packets*******************************/
for(;;)
{
if((res=libnet_write(l))==-)
{
printf("libnet_write err!\n");
exit();
}
printf("arp packet has been sent\n");
sleep();
} /*********over and destroy**************************/
libnet_destroy(l);
return ;

(如果在linux下编译:gcc -o sendarp sendarp.c -lnet  执行:sudo ./sendarp)

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

转载:blog.csdn.net/xklxlmw/article/details/1620645

Libnet编程之arp扫描存活主机

winpcap获得本机mac和ip:http://www.cnblogs.com/xinsheng/archive/2012/04/18/2456098.html

---

经实验:

arp扫描时自己的ip和mac随便,但是发送出去的arp请求ip地址不能是255的广播地址,mac可以是全f,否则是有网关会回复arp-reply;

根据自己的ip网段从1到254定向发送arp请求,网内机器会回应一个arpreply,网关会回复多个(1或者254),本机不会回复arp。

  1. 交换机是否转发arp,路由器?
  2. 自己的网卡能够收到其发出去的arp请求?
  3. ip地址设为255广播地址,是否有效?
  4. 从1~254发送arp,如果没有回复,网关是否会将这些ip的mac指向自己?

0:网络号,255:广播,1/254:通常选做网关

网段内的主机会默认向网关发送arp请求。

经实验:

1.发送目的ip为255的广播arp时,只有网关会回复,并且将目的ip对应的mac设置成网关自己的mac

2.将目的ip设置成存活主机的ip,都没有返回。

3.pcap_next_ex()函数有3种返回值,=0是抓包超时(这个时间还不知道是在哪里设置的),>0是正常,

<0是出错(是在pcap_open_live()函数中设置的超时时间,到达这个时间之后,pcap_next_ex()函数的while循环就会退出)。

以太网、arp帧结构:http://www.cnblogs.com/yhl1234/archive/2008/03/04/1090726.html

http://bbs.csdn.net/topics/50489131

网关、网段、arp、ping:http://www.yunsec.net/a/school/wlcs/agreement/2011/0711/9068.html

arp/rarp  工作原理:http://blog.sina.com.cn/s/blog_6e80f1390100mf59.html

windows下libnet ARP的更多相关文章

  1. WINDOWS下绑定ARP绑定网关

    一.WINDOWS下绑定ARP绑定网关步骤一:在能正常上网时,进入MS-DOS窗口,输入命令:arp -a,查看网关的IP对应的正确MAC地址, 并将其记录下来.注意:如果已经不能上网,则先运行一次命 ...

  2. ARP之windows下的ARP命令

    ARP之windows下的ARP命令 arp -a 查看当前电脑上的ARP映射表.可以看到当前的ARP的映射关系是动态的还是静态的. arp -s w.x.y.z aa-bb-cc-dd-ee-ff ...

  3. Windows 7下的ARP

    关于Windows 7和Windows XP下的ARP绑定的不同之处网络上已经很多,没空就不多说,注意用这样的方式绑定的arp项是动态的,动态的意思就是这个项不受任何保护,Windows想什么时候更改 ...

  4. windows下编译libnet0.10.11

    以下编译基于windows下visual studio 2013 (注:编译安装完成之后发现与网上的arp教程中使用的libnet不是一个版本,这个版本太老了,最后没有使用. 网络教程上使用的是lib ...

  5. Windows下查看局域网内某台计算机的MAC地址

    我们知道在局域网中,在Windows下,查看局域网内其他主机的ip和对应mac地址的命令是: arp -a 这样可以看到ip和mac地址的对应关系,还是比较方便的 但是有些时候使用arp命令并不能列出 ...

  6. Windows下使用scapy+python2.7实现对pcap文件的读写操作

    scapy在linux环境中对pcap文件进行操作非常方便,但在windows下,特别是在python2.7环境下却会碰到各种各样的依赖包无法使用的问题,最明显的可能就属dnet和pcap的pytho ...

  7. 初尝Windows 下批处理编程

    本文叫“ 初尝Windows 下批处理编程”是为了延续上一篇“初尝 Perl”,其实对于博主而言批处理以及批处理编程早就接触过了. 本文包括以下内容 1.什么是批处理 2.常用批处理命令 3.简介批处 ...

  8. linux下libnet编程 亲自测试可用

    linux下libnet编程 亲自测试可用 亲自测试  如果build包的时候 只要把类型改了 就能改成相应的协议. 0x0800 ip 0x0806 arp 0x86DD    IPv6 0x86e ...

  9. windows下编译配置libnet-1.2-rc3

    1.下载winpcap(一个底层驱动,可以嗅探.过滤网卡数据包,发包).exe安装包,傻瓜一步式安装 2.下载WpdPack_4_1_2,这个是winpcap的开发者包,解压之后只需要配置相关路径. ...

随机推荐

  1. 关键字local、global和内置函数【locals、globals】

    每个函数都有着自已的命名空间,叫做局部名字空间,它记录了函数的变量,包括函数的参数和局部定义的变量.每个模块拥有它自已的命名空间,叫做全局命名空间,它记录了模块的变量,包括函数.类.其它导入的模块.模 ...

  2. Fibonacci数性质

    Fibonacci数性质 0.\(F_{n-1}+F_{n-2}=F_{n} ,特殊的 F_{0}=1,F_{1}=1\) 上述式子为定义式 1.\(F_{0}+F_{1}+...+F_{n}=F_{ ...

  3. 将pandas的DataFrame数据写入MySQL数据库 + sqlalchemy

    将pandas的DataFrame数据写入MySQL数据库 + sqlalchemy import pandas as pd from sqlalchemy import create_engine ...

  4. Activiti工作流学习(一)——Activiti服务类

    Activity有9个service1.DynamicBpmnService动态Bpmn服务Service providing access to the repository of process ...

  5. springboot项目:以run as-->spring boot app方式启动,配置热部署(亲测可用!!!)

    1.在pom.xml中添加热部署依赖 <!-- 热部署 --> <!-- devtools可以实现页面热部署(即页面修改后会立即生效, 这个可以直接在application.prop ...

  6. Java进阶知识21 Spring的AOP编程

    1.概述 Aop:(Aspect Oriented Programming)面向切面编程          功能: 让关注点代码与业务代码分离! 关注点:重复代码就叫做关注点:切面: 关注点形成的类, ...

  7. [DK] 化学竞赛的大奖

    https://www.luogu.org/problemnew/show/T16502 无向图  缩点  树的直径  到直径两个端点的距离的较大值 #include <iostream> ...

  8. Cogs 1345. [ZJOI2013] K大数查询(树套树)

    [ZJOI2013] K大数查询 /* 树套树写法. bzoj过不了. 可能有负数要离散吧. 线段树套线段树. 外层权值线段树,内层区间线段树维护标记. 对权值建一棵权值线段树. 某个点表示权值在某个 ...

  9. AI 期刊会议

    本文目的为寻找以下方向最新的发展方向和资料,比如期刊会议. AI包括以下方向:计算机视觉(CV).语言(NLP)和语音 A:计算机视觉(CV) B:语言(NLP) 1. 会议 ACL.EMNLP.NA ...

  10. 在Ubuntu上安装openResty #1

    在Ubuntu上安装openResty #1 OpenResty® 是一个基于 Nginx 与 Lua 的高性能 Web 平台,其内部集成了大量精良的 Lua 库.第三方模块以及大多数的依赖项.用于方 ...