查找自己的网卡:

 #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. idea 查看类继承关系的快捷键

    类似eclipse ctrl+t的快捷键,idea中是ctrl+H

  2. 基于steam的游戏销量预测 — PART 3 — 基于BP神经网络的机器学习与预测

    语言:c++ 环境:windows 训练内容:根据从steam中爬取的数据经过文本分析制作的向量以及标签 使用相关:无 解释: 就是一个BP神经网络,借鉴参考了一些博客的解释和代码,具体哪些忘了,给出 ...

  3. P4461 [CQOI2018]九连环

    思路:\(DP\) 提交:\(2\)次 错因:高精写挂(窝太菜了) 题解: 观察可知\(f[i]=2*f[i-1]+(n\&1)\) 高精的过程参考了WinXP@luogu的思路: 发现一个问 ...

  4. UEditor粘贴word

    图片的复制无非有两种方法,一种是图片直接上传到服务器,另外一种转换成二进制流的base64码 目前限chrome浏览器使用 首先以um-editor的二进制流保存为例: 打开umeditor.js,找 ...

  5. LOJ6436. 「PKUSC2018」神仙的游戏 [NTT]

    传送门 思路 首先通过各种手玩/找规律/严谨证明,发现当\(n-i\)为border当且仅当对于任意\(k\in[0,i)\),模\(i\)余\(k\)的位置没有同时出现0和1. 换句话说,拿出任意一 ...

  6. Python互联网金融之用户增长的数据逻辑

    怎样看待和应用我们互联网金融中的数据? 怎样进行数据分析? 互联网金融数据分析的三个层面: (1)指标层面 建立指标体系,观察指标涨跌的情况 (2)行业框架 不同的行业对于各个指标的权重不同 复投率 ...

  7. Raspberry Pi 4B FTP服务器配置

    目录 1. 安装vsftpd并启动 2. 编辑配置文件 3. 重启服务 4. 测试 5. 为Web服务器添加管理员账户,便于通过ftp网站信息 参考资料:树莓派(raspberry pi)学习之安装f ...

  8. 【Robot Framework 项目实战 04】基于录制,生成RF关键字及 自动化用例

    背景 因为服务的迁移,Jira版本的更新,很多接口文档的维护变少,导致想要编写部分服务的自动化测试变得尤为麻烦,很多服务,尤其是客户端接口需要通过抓包的方式查询参数来编写自动化用例,但是过程中手工重复 ...

  9. spring cloud学习

    https://gitee.com/ylimhhmily/SpringCloudTutorial/tree/master hystrix配置不生效问题https://blog.csdn.net/lvy ...

  10. cxf报错 Cannot find any registered HttpDestinationFactory from the Bus.

    错误信息:Cannot find any registered HttpDestinationFactory from the Bus. 报错主要是因为缺少jetty依赖 一般添加如下依赖即可 < ...