ARP包模拟

mrpeterchen 2011-08-14 08:57:21
先介绍下环境

家里2台电脑,1个无线路由器
无线路由器IP 192.168.1.1
我的电脑 A 192.168.1.100
另一台 B 192.168.1.101

我模拟 A-》B的 ARP请求包。
广播形式发包

可B那头没有收到A的广播包

有谁帮忙分析下是什么原因
...全文
215 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
mrpeterchen 2011-12-26
  • 打赏
  • 举报
回复
这个问题我解决了,结贴吧

之所以会有问题和我结构体的内存对齐有关的,仔细调整了结构体就解决了
new_bird_0001 2011-11-24
  • 打赏
  • 举报
回复
arp协议(地址解析协议),用来查找网络上的设备,属于第3层协议,例如ip为192.168.1.100/24的pcA想与ip为192.168.1.101/24的pc的通信,通过子网掩码得知两pcB位于同一网段,但其arp表中并没有B的Mac地址ip地址对应,于是A发出一个arp请求,请求中包含A的Mac地址、B的ip地址,arp数据报的源ip为A的ip,目的ip为广播地址ip(255.255.255.255),这样本网段的所有网络设备都会收到这个数据报,同时这些设备arp表中没有AMac-ip对应的设备一般情况下都会将A的对应信息添加到arp表中,解析数据报后,其他设备将数据报忽略,B会直接向A发送一个回应,这里的路由器收到数据报并解析后只是将其忽略,并不将数据报送到其他子网。如果A已经知道B,则A不会向网络发出arp数据报。如果A与B不在同一网段,则A会用源ip和目标ip作为ip,用路由器在A所在网段的Mac地址发送请求,如果A的arp表中没有路由器ip(网关ip)对应的Mac地址,首先会对网关ip做一个arp查找,路由器知道A的目的地ip后,同样会在路由器在B网段的arp表中找B,同时将A送来数据报中的源Mac地址变为路由器在B所在网段上的Mac地址,找到B将目标Mac变为B的Mac地址.如果路由器与B不在同一网段,则路由器会采用同样的办法将数据报传给其知道的下一个最大权值路由器或指定的路由器。这里的每一步都有可能发生arp请求。如果动态获取ip,还会发生dhcp服务器的查找。如果使用域名,还会产生dns服务器的查找,所以要看抓到哪个ip的arp查找。
云清枫 2011-11-23
  • 打赏
  • 举报
回复
1.100.0.0
192.168.1.100
是不是封装的时候错位了,你自己写的解包程序自然刚好解出来
换个IP地址试试,比如192.168.1.101,看看抓包出来的源地址是不是101.1.0.0
langyano1 2011-11-23
  • 打赏
  • 举报
回复
1 定好你的结构
2 注意主机字节和网络字节
3 家庭路由可能屏蔽arp(如果可以,换为小交换机)
无理蛇 2011-11-11
  • 打赏
  • 举报
回复
硬件地址是指MAC地址吧。
mrpeterchen 2011-08-23
  • 打赏
  • 举报
回复
怎么还是米人啊

继续UP~~·
mrpeterchen 2011-08-22
  • 打赏
  • 举报
回复
typedef struct _ETHDR
{
unsigned char eh_dst[6];//目的以太网地址
unsigned char eh_src[6];//源以太网地址
unsigned short eh_type;//以太网包类型
}ETHDR;//14字节
typedef ETHDR* LPETHDR;

typedef struct arphdr
{
unsigned short arp_hrd;//硬件地址格式
unsigned short arp_pro;//协议地址格式
unsigned char arp_hln;//硬件地址长度
unsigned char arp_pln;//协议地址长度
unsigned short arp_op;//ARP/RARP操作,ARP请求还是响应
unsigned char arp_sha[6];//源发送者硬件地址
unsigned long arp_spa;//源发送者协议地址
unsigned char arp_tha[6];//目的硬件地址
unsigned long arp_tpa;//目的协议地址
unsigned char padding[18];//补齐最小长度,60字节
}ARPHDR;
typedef ARPHDR* PARPHDR;

谁帮忙看看我的结构体是否正确先

谢谢啦
mrpeterchen 2011-08-22
  • 打赏
  • 举报
回复
唉,我用WINPCAP的啦

答8楼的,你最好去了解下PING的原理再来吧,呵呵
BORLANDSUN 2011-08-22
  • 打赏
  • 举报
回复
我以前写ARP包时借助了WinPCap,不知道Windows API也提供了生成ARP包的接口?
BORLANDSUN 2011-08-22
  • 打赏
  • 举报
回复
ARP包?Ping?ARP包是链路层的包啊,楼主超越了?
ARP中不可能有IP信息的,楼主搞错了吧?
mrpeterchen 2011-08-22
  • 打赏
  • 举报
回复
5楼你再分析的详细点嘛~~~~

继续UP
继续等

好漫长的等待啊~~~~~~~

e_board 2011-08-21
  • 打赏
  • 举报
回复
IP地址就是一个4字节的UINT或者说是ULONG;抓到的是网络字节顺序。应该是对的。
前面(转到的是后面)变成0,是因为掩码是255.255.0.0吧
mrpeterchen 2011-08-21
  • 打赏
  • 举报
回复
那么久了,怎么没人回啊
hua_jojo 2011-08-21
  • 打赏
  • 举报
回复
我不知道!....
rpaul_csd 2011-08-15
  • 打赏
  • 举报
回复
怎么没人回啊,我顺便也学习下,就LZ一个人说了一大通
mrpeterchen 2011-08-14
  • 打赏
  • 举报
回复
抓出来PING包生成的ARP,源IP是1.100.0.0
抓自己封装的ARP是对的,源IP:192.168.1.100
mrpeterchen 2011-08-14
  • 打赏
  • 举报
回复
对了,再多说点情况

我自己写了个ARP抓包解析程序,将那个解析程序开着,然后开始PING IP
抓出来发现IP是1.100.0.0。 但是我用IPCOHFIG看了,我IP应该是192.168.1.100才对呀

还有,我又写了个ARP封装发送程序,同样我打开发送程序,里头源IP填的是我本机的192.168.1.100;
然后我的ARP抓包程序解析出来IP是对的,192.168.1.100;
就是说我解析自己封装的包,IP是对的,可解析系统生成的ARP广播,IP就变成了怪怪的1.100.0.0;

我的操作系统是WIN7 64位, 我不知道操作系统对ARP包进行了什么处理,抓出来IP好怪

请高人帮忙

1,317

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder 网络及通讯开发
社区管理员
  • 网络及通讯开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧