如何接收局域网内未知ip的数据

protosstl 2006-04-13 05:41:32
若同时发送给所有ip的数据,是这样
m_sockServerAddr.sin_family = AF_INET;
m_sockServerAddr.sin_addr.s_addr = INADDR_ANY; //向所有的IP地址发送消息
m_sockServerAddr.sin_port = htons(8001);

bind(ServerSocket,(LPSOCKADDR)&m_sockServerAddr,sizeof(m_sockServerAddr))

但如何同时接收多个ip地址的数据呢?

好久一个服务器,它要接收多个客户端的数据,但像recv()这类函数得先确定是哪个客户端发来的消息才能接收啊。怎样才能盲目的接收数据?
...全文
196 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
xuzheng318 2006-04-16
  • 打赏
  • 举报
回复
winpcap库
xhzxlqt 2006-04-16
  • 打赏
  • 举报
回复
//初始化SOCKET

u_long FAR dwValue;
WSAStartup(MAKEWORD(2,1),&wsaData);

SockRaw = socket(AF_INET , SOCK_RAW , IPPROTO_IP);
//获取本机IP地址
char FAR name[MAX_HOSTNAME_LAN];
gethostname(name, MAX_HOSTNAME_LAN);

struct hostent FAR * pHostent;
pHostent = gethostbyname(name);
SOCKADDR_IN sa;
sa.sin_family = AF_INET;
sa.sin_port = htons(10);
memcpy(&sa.sin_addr.S_un.S_addr, pHostent->h_addr_list[0], pHostent->h_length);

bind(SockRaw, (PSOCKADDR)&sa, sizeof(sa));
//设置SOCK_RAW为SIO_RCVALL,以便接收所有的IP包
DWORD dwBufferLen[10] ;
DWORD dwBufferInLen = 1 ;
DWORD dwBytesReturned = 0 ;

ioctlsocket(SockRaw, _WSAIOW(IOC_VENDOR,1), &dwValue); //原始套接字设置方法

//////////////////////////////////////////////////////////////////////////////
char RecvBuf[MAX_PACK_LEN];
while(1)
{
recv(SockRaw, RecvBuf,sizeof(RecvBuf) , 0);
// process data here
if(something happend)
break;
}
protosstl 2006-04-14
  • 打赏
  • 举报
回复
楼上可否详细给出说明?
拜过
peipeiguo 2006-04-14
  • 打赏
  • 举报
回复
要接收网络上所有的数据包,其实就是嗅探器(Sniffer)的功能。
想要实现,方法很多,最简单的方法就是使用原始套接字(Raw Socket),创建原始套接字,将网卡设置为混杂模式,接局域网内流经本地网卡收所有IP数据包。
oyljerry 2006-04-14
  • 打赏
  • 举报
回复
网络侦听所有网内数据
rabo 2006-04-13
  • 打赏
  • 举报
回复
rawsocket,混杂模式。
protosstl 2006-04-13
  • 打赏
  • 举报
回复
忘了说,补上

SOCKADDR_IN m_sockServerAddr; //SOCKET 结构

18,357

社区成员

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

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