一个问题请教,关于多个IP的

mooling 2003-10-30 08:26:19
/***********情况***********/
我遇见这样一种情况
就是我本地机器可能有多个网卡、或者多个IP地址
而我知道令一个IP地址B,也知道他在某个固定端口上开了一个UDP监听
同时在得到数据之后会向我这边的同样的固定端口发送一样的UDP包

/***********问题***********/
我的问题是如何写一个程序
在程序里就可以判断出我有那些IP地址
和我如何知道这些IP地址里哪个是可以和B进行连接的

/***********想法***********/
一个方法是分别以我得所有的IP地址建立该端口的监听程序,获得响应后即可得知
还有就是和PING的程序一样,发送一个ICMP包,就是不知道怎么得到本机的ip地址

如果谁能想出方法的话,希望能把程序贴出来,谢谢!



/******************************************************************/

其中关于获得本机的多IP地址我已看到
程序如下,来自VCKBASE

////////////////////////////////////////////////////////////////
// getip1.cpp
//
// 本程序报告本机上每一块网卡的IP地址
// 命令行编译命令为:
//
// cl getip1.cpp wsock32.lib
//
// 请一定要在环境变量中正确指定LIB库的路径;可以运行vcvars32.bat
//
#include <winsock.h>
#include <wsipx.h>
#include <wsnwlink.h>
#include <stdio.h>

int main()
{
////////////////
// 初始化 Windows sockets API. 要求版本为 version 1.1
//
WORD wVersionRequested = MAKEWORD(1, 1);
WSADATA wsaData;
if (WSAStartup(wVersionRequested, &wsaData)) {
printf("WSAStartup failed %s\n", WSAGetLastError());
return -1;
}

//////////////////
// 获得主机名.
//
char hostname[256];
int res = gethostname(hostname, sizeof(hostname));
if (res != 0) {
printf("Error: %u\n", WSAGetLastError());
return -1;
}
printf("hostname=%s\n", hostname);
////////////////
// 根据主机名获取主机信息.
//
hostent* pHostent = gethostbyname(hostname);
if (pHostent==NULL) {
printf("Error: %u\n", WSAGetLastError());
return -1;
}
//////////////////
// 解析返回的hostent信息.
//
hostent& he = *pHostent;
printf("name=%s\naliases=%s\naddrtype=%d\nlength=%d\n",
he.h_name, he.h_aliases, he.h_addrtype, he.h_length);

sockaddr_in sa;
for (int nAdapter=0; he.h_addr_list[nAdapter]; nAdapter++) {
memcpy ( &sa.sin_addr.s_addr, he.h_addr_list[nAdapter],he.h_length);
// 输出机器的IP地址.
printf("Address: %s\n", inet_ntoa(sa.sin_addr)); // 显示地址串
}
//////////////////
// 终止 Windows sockets API
//
WSACleanup();
return 0;
}
...全文
86 3 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
mooling 2003-11-05
  • 打赏
  • 举报
回复
虽然没解决问题,分还是送你了,谢谢你的热心:)
大家一起努力哦。
aimingjie 2003-11-05
  • 打赏
  • 举报
回复
我不太懂网络编程,不过还是帮搂主UP一下,希望各位dx都进来看看,帮搂主多出点子!
mooling 2003-10-31
  • 打赏
  • 举报
回复
具体点:
比方说我的机器有
A:
10.10.1.1/16
202.202.1.1/24
B:
202.202.1.2/24

其中B在5543端口上开了一个监听
只要是向这个端口发送数据他也会向对方的5543上面回数据
其中数据发送有可能会通过网关

如何得知A中的那个地址是和B能通信的
我的一个想法是分别在
10.10.1.1/16 :5433
202.202.1.1/24 :5433
上面建立监听,如果谁收到数据,谁就是可以的

还有就是在向B发送ICMP数据包,
这样截取回来的数据包,就可以的到IP包里的B的ip地址了

这样对吗?如果谁知道的话,写些代码好吗?谢了!

18,363

社区成员

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

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