有没有两台同一网段的机器,同是windows平台,有没有办法外部向一个ip发送数据,两台机器同时收到

lbird 2007-03-12 06:01:16
同上,急问
...全文
582 22 打赏 收藏 转发到动态 举报
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
WingForce 2007-03-19
  • 打赏
  • 举报
回复


几个问题:
1、你说的step 3根本不可能实现。因为任何主机只要收到ARP请求报文,则就会更新发出请求的主机的MAC地址表,也就是说,在step 1之后,B/A都知道C的MAC地址是多少了。因此,A依靠ARP欺骗(我不知道你说的欺骗怎么欺骗),是无法更新B的MAC地址表的(因为B的MAC地址表里面已经有C的MAC地址了)。
===================================================================================
ARP表有超时,A绝对可以更新B的ARP表


2、你说的step3的这种欺骗的目的不就是想说明,A之后可以给B发一份复制报文吗?告诉你,MAC和IP 没有绑定关系的,即使A不欺骗B,自己构造一个IP地址为C的报文,而MAC地址填写A的,则B也会接收,也会以为就是从C发过来的。这个道理太简单了,一个三层设备(比如路由器)对下面主机发送的报文,在IP这个层次,千变万化,但是MAC地址总是一个,难道主机就只能接收IP地址是路由器网关地址的 IP报文吗?那IP直接就是mac不就完事了吗?
===================================================================================
你说的没错,但是A想办法修改B的ARP表并不是为了发送报文给B,而是为了收到B发送给C的IP报文
这里是隐含的一个问题,我没有说清楚,sorry

3、这样不就又出现我说的问题了,“现在C需要向B发送一个IP报文,但是我们期望不但B可以收到该报文,A也可以收到该报文.”你何必这么累,直接在B上做个程序把报文在复制一个给A不就完了吗?
===================================================================================
也是完全对的,C可以同时向A和B都发送报文,或者用组播,都不需要B上面做一个程序转发给A
但是这样就需要修改C或者B主机上的程序了,这个是隐含的大前提吧?

我现在终于知道了,你为什么总在欺骗来欺骗去,你就是认为MAC和IP是一一对应的,这个是对报文的转发的时候这样说的,但是对源没有这样啊。那任何MAC 地址对一个ip地址发包,只要MAC填写对了,源MAC你爱写什么写什么,MAC和IP是2个不同层次的协议,本身没有任何的对应,你这点完全是概念不清。


squiffy 2007-03-18
  • 打赏
  • 举报
回复
好吧,仔仔细细的来讨论这个问题:

现在共有3台主机,A,B和C,他们通过一个以太网2层设备相连

现在C需要向B发送一个IP报文,但是我们期望不但B可以收到该报文,A也可以收到该报文.

当然,可以用组播或广播,这个不讨论了.

step1, C只知道B的IP地址,而不知道其MAC地址,于是ARP寻找B的IP对应的MAC

step2, 为了能令A接收到该IP报文,A在收到C发出的ARP时,返回一个欺骗的ARP,告诉C,我就是你在
寻找的IP.

step3, 同时,B很明显也收到了C发出的ARP,当它回应的时候,A给它返回一个欺骗的ARP,告诉B,我就是C.

step4, A同时欺骗了B和C,C于是向A的MAC发送报文,而B收不到这些报文.A可以向B发送复制的一份报文.

很明显,如果只是伪装源IP,A不可能收到C发送的报文.

====================================================
几个问题:
1、你说的step 3根本不可能实现。因为任何主机只要收到ARP请求报文,则就会更新发出请求的主机的MAC地址表,也就是说,在step 1之后,B/A都知道C的MAC地址是多少了。因此,A依靠ARP欺骗(我不知道你说的欺骗怎么欺骗),是无法更新B的MAC地址表的(因为B的MAC地址表里面已经有C的MAC地址了)。
2、你说的step3的这种欺骗的目的不就是想说明,A之后可以给B发一份复制报文吗?告诉你,MAC和IP没有绑定关系的,即使A不欺骗B,自己构造一个IP地址为C的报文,而MAC地址填写A的,则B也会接收,也会以为就是从C发过来的。这个道理太简单了,一个三层设备(比如路由器)对下面主机发送的报文,在IP这个层次,千变万化,但是MAC地址总是一个,难道主机就只能接收IP地址是路由器网关地址的IP报文吗?那IP直接就是mac不就完事了吗?
3、这样不就又出现我说的问题了,“现在C需要向B发送一个IP报文,但是我们期望不但B可以收到该报文,A也可以收到该报文.”你何必这么累,直接在B上做个程序把报文在复制一个给A不就完了吗?

我现在终于知道了,你为什么总在欺骗来欺骗去,你就是认为MAC和IP是一一对应的,这个是对报文的转发的时候这样说的,但是对源没有这样啊。那任何MAC地址对一个ip地址发包,只要MAC填写对了,源MAC你爱写什么写什么,MAC和IP是2个不同层次的协议,本身没有任何的对应,你这点完全是概念不清。
lbird 2007-03-18
  • 打赏
  • 举报
回复
一台机器收到然后转发另一台,不符合我的要求,我的要求是能否同时收到,因为这个应用关于容错,希望能同时收到。
squiffy 2007-03-17
  • 打赏
  • 举报
回复
交换机转发的时候,携带的是固定MAC不可能是一个广播MAC。
=================================================================

这是肯定的,但是源主机是怎么知道目标主机的MAC的?

难道它能具有一种超越网络的心灵感应能力?
====================================================================

ARP欺骗实际上就是一种让交换机学习ARP的过程(只是学习过程被控制或者说被利用了),这个学习的过程中,得到的本质上就是IP+MAC的对应表(这个MAC地址被控制了),ARP欺骗的唯一目的就是让本身到达A主机(MAC)的IP报文发送到了B主机上,那么如何利用ARP欺骗达到让一个IP报文同时达到A和B呢?
我说的就是这个道理,因此我还是觉得无法利用ARP欺骗把一个IP报文同时送到A和B上。因为ARP欺骗无法控制交换机把一个IP报文发送2次。只是发送一次的过程,目的地改变了而已。
withcsharp 2007-03-17
  • 打赏
  • 举报
回复
WSAIoctl

The Windows Sockets WSAIoctl function controls the mode of a socket.

int WSAIoctl (

SOCKET s,
DWORD dwIoControlCode,
LPVOID lpvInBuffer,
DWORD cbInBuffer,
LPVOID lpvOUTBuffer,
DWORD cbOUTBuffer,
LPDWORD lpcbBytesReturned,
LPWSAOVERLAPPED lpOverlapped,
LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionROUTINE
);


Parameters

s

[in] Handle to a socket

dwIoControlCode

[in] Control code of operation to perform

lpvInBuffer

[in] Address of input buffer

cbInBuffer

[in] Size of input buffer

lpvOutBuffer

[out] Address of output buffer

cbOutBuffer

[in] Size of output buffer

lpcbBytesReturned

[out] Address of actual bytes of output

lpOverlapped

[in] Address of WSAOVERLAPPED structure

lpCompletionRoutine

[in] A pointer to the completion routine called when the operation has been completed.
withcsharp 2007-03-17
  • 打赏
  • 举报
回复
混杂模式
api FWSAIoctl

长尾巴的悟空 2007-03-17
  • 打赏
  • 举报
回复
事实上是不可能的,因为IP分解回来以后,再经过MAC地址都变了,不可能有固定的IP

如果软件上可以模拟同一样的地址的话,那应该是可以办到的
WingForce 2007-03-17
  • 打赏
  • 举报
回复
ARP欺骗实际上就是一种让交换机学习ARP的过程(只是学习过程被控制或者说被利用了),这个学习的过程中,得到的本质上就是IP+MAC的对应表(这个MAC地址被控制了),ARP欺骗的唯一目的就是让本身到达A主机(MAC)的IP报文发送到了B主机上,那么如何利用ARP欺骗达到让一个IP报文同时达到A和B呢?
我说的就是这个道理,因此我还是觉得无法利用ARP欺骗把一个IP报文同时送到A和B上。因为ARP欺骗无法控制交换机把一个IP报文发送2次。只是发送一次的过程,目的地改变了而已。

=====================================================================================

报文当然也不会被发送2次

但是你可以自己发送那个第2次啊。。。

再说清楚点:

主机A欺骗源主机,接收到源主机本来要发送给主机B的报文

然后,主机A再欺骗主机B,将报文复制一份,伪装成源主机发送给B
WingForce 2007-03-17
  • 打赏
  • 举报
回复
这个过程就需要采用普通的源IP伪装即可,或者也可以说主机A具有IP报文复制和转发的功能罢了,这不是又回到我最初提到的问题,需要在A主机上做一段程序来实现这个功能,既然在A上做一段程序,何必那么累啊,直接让交换机把报文发到A不就完事了吗??何必再提ARP欺骗啊?
=======================================================================================

好吧,仔仔细细的来讨论这个问题:

现在共有3台主机,A,B和C,他们通过一个以太网2层设备相连

现在C需要向B发送一个IP报文,但是我们期望不但B可以收到该报文,A也可以收到该报文.

当然,可以用组播或广播,这个不讨论了.

step1, C只知道B的IP地址,而不知道其MAC地址,于是ARP寻找B的IP对应的MAC

step2, 为了能令A接收到该IP报文,A在收到C发出的ARP时,返回一个欺骗的ARP,告诉C,我就是你在
寻找的IP.

step3, 同时,B很明显也收到了C发出的ARP,当它回应的时候,A给它返回一个欺骗的ARP,告诉B,我就是C.

step4, A同时欺骗了B和C,C于是向A的MAC发送报文,而B收不到这些报文.A可以向B发送复制的一份报文.

很明显,如果只是伪装源IP,A不可能收到C发送的报文.



squiffy 2007-03-17
  • 打赏
  • 举报
回复
ARP欺骗实际上就是一种让交换机学习ARP的过程(只是学习过程被控制或者说被利用了),这个学习的过程中,得到的本质上就是IP+MAC的对应表(这个MAC地址被控制了),ARP欺骗的唯一目的就是让本身到达A主机(MAC)的IP报文发送到了B主机上,那么如何利用ARP欺骗达到让一个IP报文同时达到A和B呢?
我说的就是这个道理,因此我还是觉得无法利用ARP欺骗把一个IP报文同时送到A和B上。因为ARP欺骗无法控制交换机把一个IP报文发送2次。只是发送一次的过程,目的地改变了而已。

=====================================================================================

报文当然也不会被发送2次

但是你可以自己发送那个第2次啊。。。

再说清楚点:

主机A欺骗源主机,接收到源主机本来要发送给主机B的报文

然后,主机A再欺骗主机B,将报文复制一份,伪装成源主机发送给B

=============================================================

主机A再欺骗主机B,将报文复制一份,伪装成源主机发送给B???

这个过程叫ARP欺骗啊??

这个过程就需要采用普通的源IP伪装即可,或者也可以说主机A具有IP报文复制和转发的功能罢了,这不是又回到我最初提到的问题,需要在A主机上做一段程序来实现这个功能,既然在A上做一段程序,何必那么累啊,直接让交换机把报文发到A不就完事了吗??何必再提ARP欺骗啊?
anjuta_c 2007-03-15
  • 打赏
  • 举报
回复
哈哈,说得有意思
WingForce 2007-03-15
  • 打赏
  • 举报
回复
交换机转发的时候,携带的是固定MAC不可能是一个广播MAC。
=================================================================

这是肯定的,但是源主机是怎么知道目标主机的MAC的?

难道它能具有一种超越网络的心灵感应能力?
squiffy 2007-03-15
  • 打赏
  • 举报
回复
我还是不明白。
交换机转发的时候,携带的是固定MAC不可能是一个广播MAC。这样数据包只可能到达一个节点,如果该节点具有转发功能,则根本不需要欺骗啊。何必那么复杂啊,直接把具有交换功能的节点的MAC和具有交换节点的目标IP对应不就完事了吗。

因为现在的问题是一个IP报文,2台主机同时收到,因此ARP欺骗肯定没用啊。除非你欺骗的目的MAC是一个组播MAC,但是这样的欺骗一般交换机都有功能防御。
squiffy 2007-03-14
  • 打赏
  • 举报
回复
1、组播,但是要求局域网支持组播转发。现在的网络好像有点难哦。
2、内网2台机器必须采用HUB连接,且处于一个网段。一台机器网卡配置成混杂模式。---我觉得这个可行。

To WingForce(初六,履霜,坚冰至。) :
我觉得ARP欺骗应该不行,因为ARP欺骗只能保证一台机器收到,因为IP报文不会重发的,无论怎么欺骗,也只能保证交换机发给一台主机。
anjuta_c 2007-03-14
  • 打赏
  • 举报
回复
可以转发啊,只是作为中继,欺骗一下双方吗
WingForce 2007-03-14
  • 打赏
  • 举报
回复
我觉得ARP欺骗应该不行,因为ARP欺骗只能保证一台机器收到,因为IP报文不会重发的,无论怎么欺骗,也只能保证交换机发给一台主机。

=======================================================================================
和ls说的一样,欺骗双方
WingForce 2007-03-13
  • 打赏
  • 举报
回复
其实是要视具体情况而定的

我个人以为:
1 如果多台主机通过hub相连,可以通过将网卡设为混杂模式接收到所有的数据包,因为毕竟物理上所有报文都是“广播”的,由网卡来选择接收。

2 如果多台主机通过2层设备相连,只是将网卡设为混杂模式,肯定是无法收到发送到别的端口上的报文的。但是个人以为可以通过ARP欺骗曲线救国:
比如,2层设备端口1,2,3,某主机通过端口1发送报文到端口2,在端口3上想直接接收这个报文必然是不可能的。
但是主机通过端口1发送报文到2时,肯定不知道2的地址,会先发送ARP广播包,端口2上的主机收到该ARP包后会更新本地ARP表,在返回应答,通知端口1上的主机。

所以:端口3上的主机可以截获该ARP包,并伪装成端口2的主机向端口1发送ARP包,再伪装成端口1上的主机给端口2上的主机发送ARP包,完成欺骗。

lbird 2007-03-13
  • 打赏
  • 举报
回复
TO anjuta_c() :
你说的多播组地址就是指子网地址么,xxx.xxx.xxx.000这样的么?
to WingForce
将网卡设为混杂模式,本机的上层应用无需做修改就可以收到外部主机发给其它机器的网络数据么?
oyljerry 2007-03-13
  • 打赏
  • 举报
回复
服务器多播,组播
anjuta_c 2007-03-13
  • 打赏
  • 举报
回复
多播组ip地址是32位中,高4位为1110的ip地址,范围是224.0.0.0--->239.255.255.255.
另外多播只能适用于udp;
楼上的arp欺骗是一种方法,在路由器和ip目的地之间,加入一个“欺骗节点”,可能是最行之有效的方法吧。
如果是正儿八经的应用程序,还是建议使用一个开发一个中转服务器,任何一个客户端需要都可以收到和发送数据
加载更多回复(2)

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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