社区
网络及通讯开发
帖子详情
怎么通过发udp包获得当前局域网的所有计算机IP地址?
gqxs
2003-03-10 08:41:15
高手指教,不胜感谢!
...全文
310
16
打赏
收藏
怎么通过发udp包获得当前局域网的所有计算机IP地址?
高手指教,不胜感谢!
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
16 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
NowCan
2003-03-13
打赏
举报
回复
这样又要用libnet库了。
gqxs
2003-03-13
打赏
举报
回复
以本地主机的名义(本地主机的ip和mac)向指定ip网段内的所有主机发送广播(ff:ff:ff:ff:ff:ff)ARP Request数据报,存活的主机就会发送ARP Reply数据报,这样就可以获得当前存活主机的列表。
猛禽
2003-03-11
打赏
举报
回复
netstat只是取得当前所有连到本机的地址,而不是连在网上的地址
gqxs
2003-03-11
打赏
举报
回复
可能了解netstat的原理可以解决这个问题
gqxs
2003-03-11
打赏
举报
回复
现在觉的应该研究一下arp
NowCan
2003-03-10
打赏
举报
回复
有这么牛的事?
如果对方是Windows系统,并且有BIOS名字解析,可以向UDP137端口发一个数据包,返回的数据包里有对方的名字。
其实,按理说来个广播ping,所有的计算机都回应一下就可以了。但是不幸的是所有Windows平台都不回应广播ping。
猛禽
2003-03-10
打赏
举报
回复
Linux应该是不会理睬137端口的,要通用的话,只有PING
gqxs
2003-03-10
打赏
举报
回复
应该可以,我有一个做好乐的exe,连连接的网站ip都可以查出来
NowCan
2003-03-10
打赏
举报
回复
问题就是计算机不回应广播呀,怎么办?NetBios的方法就是上面那个了。但是这个方法对Linux好像不行。
gqxs
2003-03-10
打赏
举报
回复
具我所知,有个想法是发个广播,让所有收到广播的计算机都回发一个广播,这样来知道整个局域网的计算机ip。据说是可以实现的。
jhsu
2003-03-10
打赏
举报
回复
不一个一个来是不行的,因为windows的netbios不支持广播,而且广播也不能跨网段。
其实上面的程序就是Netbios()函数之内核,直接使用Netbios()函数也可以,只是它的等待时间要长的多。
WhyAndAnswer
2003-03-10
打赏
举报
回复
learning...
gqxs
2003-03-10
打赏
举报
回复
我就是不想一个一个去ping,还有办法吗?
也许不是用udp广播包,用netbios也可能的,在等等
jhsu
2003-03-10
打赏
举报
回复
最近刚好写了一个。
给你点提示:
Port:137
定义结构:
struct nbname_request {
WORD transaction_id;
WORD flags;
WORD question_count;
WORD answer_count;
WORD name_service_count;
WORD additional_record_count;
char question_name[34];
WORD question_type;
WORD question_class;
};
赋值:
request.transaction_id = 0;
request.flags = htons(0x0010);
request.question_count = htons(1);
request.answer_count = 0;
request.name_service_count = 0;
request.additional_record_count = 0;
strcpy(request.question_name," CKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA");
request.question_type = htons(0x21);
request.question_class = htons(0x01);
......
发送:
if(sendto(s,(char *)&request,sizeof(request),0,(sockaddr FAR*)&socket_out,sizeof(socket_out)) == SOCKET_ERROR)
{
return NULL;
}
等待:
switch(WSAWaitForMultipleEvents(1,&event_obj,true,wait_time,true))
{
default:
return NULL;
case WSA_WAIT_EVENT_0:;
}
接收:
size = recvfrom(s,(char FAR*)buffer,1024,0,(sockaddr FAR*)&socket_recv,(int FAR*)&recv_len);
if(size > 0)
{
......
}
在buffer中有许多有用的东西。
需要挨个IP去试,设置wait_time为5ms,重复3次,则查询全部254个IP需时最大3.8s,如果有多个网段,可使用多线程。
需要Source Code的话可以回复我,不过要先给分喔。
l_clove
2003-03-10
打赏
举报
回复
来个循环ping,呵呵
要不在所有机器上装个自己写的服务,你肯定不干
albeta
2003-03-10
打赏
举报
回复
在自己所在的字网内ping一下其他全部机器不就可以了?
局域网
UDP
通讯小例子
通过
UDP
与
局域网
的其他
计算机
进行通讯,只需要更改指定
计算机
ip地址
就可以了
Android
局域网
内快速查找某个设备的
IP地址
(
UDP
通信)
需求:通过
udp
传输方式,快速找到同
局域网
内某设备 思路:需要某设备
发
送,手机接收。或者手机
发
送,设备接收,两个设备需在同一
局域网
内 1、建立
udp
socket服务 2、提供数据,并将数据封装到数据
包
中 3、通过socket服务的
发
送功能,将数据
包
发
送出去。 4、关闭资源。 DatagramSocket:此类表示用来
发
送和接收数据报
包
的套接字。在 DatagramSocket 上总是启用
UDP
...
计算机
网络 传输层 TCP和
UDP
协议
Re:
计算机
网络 传输层 TCP和
UDP
协议 # 传输层协议 TCP 和
UDP
的应用场景 要
发
送的内容多,需要将
发
送的内容分成多个数据
包
... LAND攻击:自己就是源地址 # 通过抓
包
工具,查看以上报文格式 # 习题详解
QT 通过
UDP
广播获取网络中所有设备
ip地址
说明:源码下载:提供源码下载地址,源码使用说明,先在需要获取
IP地址
的主机上运行server端程序,然后在需要搜索主机的Pc上运行client端程序本文是QT版本,有时候需要搜索网络中的设备,机器,服务器等,这就要要用到
UDP
广播的方式,
发
送广播命令,广播给网络中的每一个主机,该主机搜到广播命令后,立刻
发
送给请求端自己的设备信息,这里以IP信息为例子。思路在每一个设备中部署sever端程序进行监控,
C#如何获取
当前
主机的
局域网
IP
获取到主机名后,我们使用Dns.GetHostAddresses(hostName)方法来获取IP列表,这也是一个静态方法,用于获取指定主机名(或 IP 地址字符串)对应的 IP 地址列表。它接受一个主机名或 IP 地址作为参数,并返回一个 IPAddress[] 数组,其中
包
含与该主机名或 IP 地址关联的所有 IP 地址。另外,如果传入的参数是一个有效的 IP 地址字符串(例如:“192.168.0.1”),那么方法将直接将该字符串解析为一个 IPAddress 对象并放入数组中返回。
网络及通讯开发
1,316
社区成员
8,873
社区内容
发帖
与我相关
我的任务
网络及通讯开发
C++ Builder 网络及通讯开发
复制链接
扫一扫
分享
社区描述
C++ Builder 网络及通讯开发
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章