检测局域网的IP冲突

lwx_work 2009-08-18 01:34:39
若何检测 局域网内 是否有IP冲突现象,不仅仅是检测与本机的冲突,也包括其他两台PC间的IP冲突,如何检测,。

请帮忙 谢谢
...全文
505 23 打赏 收藏 转发到动态 举报
写回复
用AI写文章
23 条回复
切换为时间正序
请发表友善的回复…
发表回复
jyh_baoding 2009-08-25
  • 打赏
  • 举报
回复
难度不小
lwx_work 2009-08-24
  • 打赏
  • 举报
回复
[Quote=引用 21 楼 wenxy1 的回复:]
建议楼主补补TCP/IP协议知识。经典的书《TCP/IP详解》三卷书。
工具:Wireshark.
官文文档:RFC
[/Quote]

能不能就告诉我为什么UDP不行
Wenxy1 2009-08-24
  • 打赏
  • 举报
回复
建议楼主补补TCP/IP协议知识。经典的书《TCP/IP详解》三卷书。
工具:Wireshark.
官文文档:RFC
lwx_work 2009-08-24
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 cv_china 的回复:]
以上说的是攻击
只是检测的话你可以给所有可能的IP发数据

C/C++ code//向网络发送ARP包和ICMP包 ulNetwork=ntohl(ipAddr)& (0xffffff00);int nIP=1;for(int n=1; n<255; n++)//IP:1-254 {
ipAddr=htonl(ulNetwork+n);
IPAddr*lpIPAddr=new(IPAddr);if(lpIPAddr==NULL)continue;
(*lpIPAddr)=ipAddr;//要发往的IP地址while(ThreadCounter>=30)//可同时运行30个线程if(CheckStatus(nIP, FALSE))//线程已满,检查扫描情况 nIP++;

hThread=CreateThread(NULL,0, (LPTHREAD_START_ROUTINE)SendArp,(LPVOID)lpIPAddr,0,&ThreadID);
CloseHandle(hThread);
}//继续输出扫描结果while(nIP<255)if(CheckStatus(nIP, TRUE))
nIP++;//输出找到的主机数if (FoundCounter)
printf(" %d Found.", FoundCounter);else
printf("Scan your LAN only, don't try to scan IPs not in your LAN.");if(bPing)
{
closesocket(sock);
WSACleanup();
}
[/Quote]

为什么要用ARP或ICMP 我用UDP组播出去,然后等应答,应答内容包括IP和MAC,同一个IP地址,不同MAC的两台就冲突了。 请教一下 这样可以吗
lwx_work 2009-08-24
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 wenxy1 的回复:]
引用楼主 lwx_work 的回复:
若何检测  局域网内 是否有IP冲突现象,不仅仅是检测与本机的冲突,也包括其他两台PC间的IP冲突,如何检测,。

请帮忙  谢谢

发ARP广播包,同一个IP若收到两个或两个以上的ARP应答包,就意味着冲突。
[/Quote]

广播的话,用UDP组播出去不行吗?为什么大家都说用ARP
月竹影 2009-08-21
  • 打赏
  • 举报
回复
ICMP协议应该可以满足你的要求
Wenxy1 2009-08-19
  • 打赏
  • 举报
回复
[Quote=引用楼主 lwx_work 的回复:]
若何检测 局域网内 是否有IP冲突现象,不仅仅是检测与本机的冲突,也包括其他两台PC间的IP冲突,如何检测,。

请帮忙 谢谢
[/Quote]
发ARP广播包,同一个IP若收到两个或两个以上的ARP应答包,就意味着冲突。
cv_china 2009-08-18
  • 打赏
  • 举报
回复
以上说的是攻击
只是检测的话你可以给所有可能的IP发数据


//向网络发送ARP包和ICMP包
ulNetwork=ntohl(ipAddr) & (0xffffff00);
int nIP=1;
for(int n=1; n<255; n++) //IP:1-254
{
ipAddr=htonl(ulNetwork+n);
IPAddr *lpIPAddr=new(IPAddr);
if(lpIPAddr==NULL)
continue;
(*lpIPAddr)=ipAddr; //要发往的IP地址

while(ThreadCounter>=30) //可同时运行30个线程
if(CheckStatus(nIP, FALSE)) //线程已满,检查扫描情况
nIP++;

hThread=CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)SendArp,(LPVOID)lpIPAddr, 0, &ThreadID);
CloseHandle(hThread);
}

//继续输出扫描结果
while(nIP<255)
if(CheckStatus(nIP, TRUE))
nIP++;

//输出找到的主机数
if (FoundCounter)
printf(" %d Found.", FoundCounter);
else
printf("Scan your LAN only, don't try to scan IPs not in your LAN.");
if(bPing)
{
closesocket(sock);
WSACleanup();
}
lwx_work 2009-08-18
  • 打赏
  • 举报
回复
顶一下,来人啊
lwx_work 2009-08-18
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 cv_china 的回复:]
ARP攻击的手段有2种:
1.欺骗主机:把你的ARP表网关地址于攻击人电脑MAC绑定,假冒主机
2.欺骗路由器:路由器把ARP表里的所有地址都绑定为攻击人的MAC,从而造成其他电脑显示IP冲突
[/Quote]

除了用ARP欺骗,还有没有其他思路可以实现啊。毕竟这种对局域网设备通信有影响。我这种检测要在联网设备中实现,系统中由一台PC和很多带网卡的设备组成。首先要保证系统的稳定性,要检测必须要影响到其他设备之间的tcp通信,这代价也太大了吧
cv_china 2009-08-18
  • 打赏
  • 举报
回复
ARP攻击的手段有2种:
1.欺骗主机:把你的ARP表网关地址于攻击人电脑MAC绑定,假冒主机
2.欺骗路由器:路由器把ARP表里的所有地址都绑定为攻击人的MAC,从而造成其他电脑显示IP冲突
cv_china 2009-08-18
  • 打赏
  • 举报
回复
如果你能登陆路由器的话,可以直接看;
要自己写c代码操作的话,就是与路由器通讯(有权限操作),具体我也没做过。
不过网上有很多源代码,他们用的方式是枚举搜索1~255,根据应答来列表
不动如岳 2009-08-18
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 lwx_work 的回复:]
引用 9 楼 conry 的回复:
arp欺骗
[/Quote]说的好啊,原理就是想全网络发arp包,说我是网关
局域网的主机,要发送消息的时候,就会把数据包发到你这来,
你在分析ip和mac的对应关系,应该可以找到别人的ip冲突
只不过这样的话,局域网内的主机,就都上不了网了
...
lwx_work 2009-08-18
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 conry 的回复:]
arp欺骗
[/Quote]

大侠 请说具体一点啊
Conry 2009-08-18
  • 打赏
  • 举报
回复
arp欺骗
zhaohongbo83 2009-08-18
  • 打赏
  • 举报
回复
up!
不动如岳 2009-08-18
  • 打赏
  • 举报
回复
路由器的ARP表,应该只会由当前连接上的那个的mac地址
要多读几次,才可以吧

不知道如何具体读路由arp表,帮顶一下
lwx_work 2009-08-18
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 cv_china 的回复:]
读取路由器的ARP表
[/Quote]

请问具体怎么操作
cv_china 2009-08-18
  • 打赏
  • 举报
回复
读取路由器的ARP表
chinezwq 2009-08-18
  • 打赏
  • 举报
回复
冲突肯定有一方的连接会挤兑另一方的连接,在整个网络上查找应该可以实现的,就是没有具体做过
加载更多回复(3)

18,356

社区成员

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

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