社区
网络及通讯开发
帖子详情
求关于扫描一个子网活动IP地址的网络编程
duanyunyuan
2006-06-28 09:23:16
使用ICMP协议中的Echo/Reply实现扫描一个子网,发现该子网中哪些IP地址正在使用,把扫描结果显示在List中。
...全文
413
2
打赏
收藏
求关于扫描一个子网活动IP地址的网络编程
使用ICMP协议中的Echo/Reply实现扫描一个子网,发现该子网中哪些IP地址正在使用,把扫描结果显示在List中。
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
2 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
wm820712
2006-07-07
打赏
举报
回复
先向某个IP发送ICMP数据报,其中的类型为ICMP_ECHO,然后等待该IP回应ICMP,其类型为ICMP_ECHOREPLY.
如何用socket函数来发送接受ICMP数据报?
1)先打开socket:
SOCKET sockRaw = WSASocket (AF_INET, SOCK_RAW, IPPROTO_ICMP, NULL, 0,0);
2) 发送数据报
bwrote = sendto(sockRaw,icmp_data,datasize,0,(struct sockaddr*)&dest, sizeof(dest));
其中的icmp_data为ICMP数据报, dest为目的地址(通过inet_addr从IP地址获取)
3)接收数据报
bread = recvfrom(sockRaw,recvbuf,MAX_PACKET,0,(struct sockaddr*)&from, &fromlen);
其中的recvbuf为收到的ICMP数据报,from为发送端的IP
通过这样实现,具体流程怎么样,请问??
jone7319
2006-06-28
打赏
举报
回复
用下面这三个函数来实现
void __fastcall TForm5::ScanNetComputer()
{
Screen-> Cursor=crAppStart;
Computers=new TStringList();
ComputerIp=new TStringList();
EnumNetResource(Computers,NULL,RESOURCE_GLOBALNET,RESOURCETYPE_ANY);
Screen-> Cursor=crDefault;
//??IP??
if(Computers->Count==0) return;
CheckListBox1->Clear();
for(int i=0;i<Computers->Count;i++)
{
Screen-> Cursor=crHourGlass;
AnsiString IP=gethostip(Computers->Strings[i]);
Screen-> Cursor=crDefault;
if(IP!="")
{ComputerIp->Add(IP);
CheckListBox1->Items->Add(Computers->Strings[i]+" (IP="+IP+")");
}
}
}
//---------------------------------------------------------------------------
bool __fastcall TForm5::EnumNetResource(TStrings *rcList,LPNETRESOURCE lpNR, DWORD dwScope,DWORD dwType)
{
HANDLE hEnum = 0; // resource-handle
DWORD dwResult = WNetOpenEnum(
dwScope, // scope of enumeration
dwType, // resource types to list
0, // enumerate all resources
lpNR, // pointer to resource structure (NULL at first time)
&hEnum // handle to resource
) ;
if( dwResult != NO_ERROR ) return false;
bool bRet=true;
DWORD dwEntries = 0xFFFFFFFF ; // enumerate all possible entries
NETRESOURCE NR[1024];
DWORD dwBuffer=1024*sizeof(NETRESOURCE);
while(1)
{
dwResult = WNetEnumResource(hEnum,&dwEntries,(LPVOID)NR,&dwBuffer) ;
if( dwResult == ERROR_NO_MORE_ITEMS ) break;
else if( dwResult != NO_ERROR ) { bRet=false; break;}
for(DWORD i = 0 ; i < dwEntries ; i++ )
{
if(NR[i].dwDisplayType==RESOURCEDISPLAYTYPE_SERVER)
{
char *p=NR[i].lpRemoteName;
while(*p=='\\') p++;
if(*p) rcList->Add(p);
}
else if((NR[i].dwUsage&RESOURCEUSAGE_CONTAINER)==RESOURCEUSAGE_CONTAINER)
{
bRet=EnumNetResource(rcList,&NR[i],dwScope,dwType);
if(bRet==false) break;
}
}
if(bRet==false) break;
}
WNetCloseEnum(hEnum) ;
return bRet;
}
//----------------------------------------------------------
//??????IP??,???????,????????IP??---------
AnsiString __fastcall TForm5::gethostip(AnsiString & host)
{
WSADATA wsaData;
AnsiString IP;
WSAStartup(MAKEWORD(2,0),&wsaData);
if(host.IsEmpty())
{
char hostname[128];
if(gethostname(hostname,128)!=0) return AnsiString("");
host=hostname;
}
try
{
struct hostent *hp=gethostbyname(host.c_str());
if(WSAGetLastError()==WSAHOST_NOT_FOUND)
{
IP="";
return IP;
}
else
IP=inet_ntoa(*(struct in_addr*)hp->h_addr_list[0]);
}
catch(...)
{
IP="";
}
WSACleanup();
return IP;
}
.net开发笔记(十三) Winform常用开发模式第一篇
上一篇博客最后我提到“异步编程模型”(APM),之后本来打算整理一下这方面的材料然后总结一下写篇文章与诸位分享,后来在整理的过程中不断的延伸不断地扩展,发现完全偏离了“异步编程”这个概念,前前后后所有的加起来完全可以写一篇关于框架原理的东西,而“异步编程”只是其中的一小部分,后来我一...
这8个Winform开源项目
这8个Winform开源项目 属于WinForm的短暂时代早已结束,当今Web统治天下,那些上了一定年龄的.NETer 可能对这些开源项目还有印象! 1.WinHtmlEditor
一个
非常不错的开源Winform下面的Html编辑器。包括的基本功能和Word差不多了,常规的格式功能都有,以及清除MS-Word格式、拼写检查、插入表格、日期、时间,上标、下标和打印功能等等。 https://github.com/tewuapple/WinHtmlEditor 2.SunnyUI 基于 C#.
网络及通讯开发
1,317
社区成员
8,874
社区内容
发帖
与我相关
我的任务
网络及通讯开发
C++ Builder 网络及通讯开发
复制链接
扫一扫
分享
社区描述
C++ Builder 网络及通讯开发
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章