查找自己的网卡:

 #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. Mysql批量更新的一个坑-&allowMultiQueries=true允许批量更新(转)

    实际上,我们经常会遇到这样的需求,那就是利用Mybatis批量更新或者批量插入,但是,实际上即使Mybatis完美支持你的sql,你也得看看你说操作的数据库是否支持,而阿福,最近就遇到这样的一个坑. ...

  2. //点击按钮加减音频音量到最小会出现bug什么意思???

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  3. 使用docker配置gitlab服务器

    下载gitlab镜像,导入 [root@gitlab ~]# docker load < gitlab_zh.tar 容器需要22端口,所以修改ssh的默认端口 [root@gitlab ~]# ...

  4. myeclipse打开jsp后死掉,或变卡的问题

    很多小伙伴在myeclipse下打开jsp会特别卡,甚至会卡死掉,我也遇到过很多次这种情况,下面分享一下解决方法: 1,打开 Window -> Preferences -> Genera ...

  5. MySQL 几种性能测试的工具使用

    近期由于要比较mysql及其分支mariadb, percona的性能,了解了几个这方面的工具,包括:mysqlslap sysbench tpcc-mysql,做一个整理,备忘,分享 1.mysql ...

  6. C语言学习笔记10-结构体、枚举、联合体

    C语言学习笔记10-结构体.枚举.联合体    待传

  7. 2019.6.28 校内测试 T2 【音乐会】二重变革

    看到这个题之后,一个很暴力很直接的想法就是贴上题目中的代码然后交上去走人,但是很显然这是会TLE+MLE的,想想谁会这么傻把主要代码给你QwQ~: 其实这段代码是想告诉你一件事:用序列中的大数减去小数 ...

  8. 1.1 OC class new summary

    1.http://www.cnblogs.com/mjios/archive/2013/04/06/3002814.html 2.How to create a oc class? 3. 3.1 In ...

  9. 基于nodejs将mongodb的数据实时同步到elasticsearch

    一.前言 因公司需要选用elasticsearch做全文检索,持久化存储选用的是mongodb,但是希望mongodb里面的数据发生改变可以实时同步到elasticsearch上,一开始主要使用ela ...

  10. FLUENT多孔介质数值模拟设置【转载】

    转载自:http://zhengjun0228.blog.163.com/blog/static/71377014200971895419613/ 多孔介质条件 多孔介质模型可以应用于很多问题,如通过 ...