如何用c语言实现从某个网段中逐个取出ip地址

如何用c语言实现从某个网段中逐个取出ip地址,第1张

我临时写吧,没有调试,主要是这什么用啊,能用来换钱么

#inlcude<stdioh>

void main(void)

{

char a1,a2,a3,a4;

char m1,m2,m3,m4;

char r1,r2,r3,r4;

a1=127;a2=0;a3=0;a4=1; // your IP

m1=255;m2=255;m3=248;m4=0; // IP netmask

r1=a1&m1;r2=a2&m2;r3=a3&m3;r4=a4&m4; //your IP segment

m1=~m1;m2=~m2;m3=~m3;m4=~m4;

下面就是循环了循环的处理方法是如果m中为0,则循环0到255,不为0,则循环到大于这个m的时候,就终止所有循环,您自己动动脑筋,我点到这步比较好。

}

C语言如何实现IP地址查询系统

参考如下:

void GetNameAndIp()

{

struct hostent host;

struct in_addr ptr;

DWORD dwScope = RESOURCE_CONTEXT;

NETRESOURCE NetResource = NULL;

HANDLE hEnum;

WNetOpenEnum(dwScope, NULL, NULL, NULL, &hEnum);

WSADATA wsaData;

WSAStartup(MAKEWORD(1, 1), &wsaData);

if (hEnum)

{

DWORD Count = 0xFFFFFFFF;

DWORD BufferSize = 10240;

LPVOID Buffer = new char[10240];

WNetEnumResource(hEnum, &Count, Buffer, &BufferSize);

NetResource = (NETRESOURCE)Buffer;

char szHostName[200];

for (unsigned int i = 0; i < BufferSize / sizeof(NETRESOURCE); i++, NetResource++)

{

if (NetResource->dwUsage == RESOURCEUSAGE_CONTAINER && NetResource->dwType == RESOURCETYPE_ANY)

{

if (NetResource->lpRemoteName)

{

CString strFullName = NetResource->lpRemoteName;

if (0 == strFullNameLeft(2)Compare(_T("\\\\")))

strFullName = strFullNameRight(strFullNameGetLength() - 2);

gethostname(szHostName, strlen(szHostName));

USES_CONVERSION;

char pchar = T2A(strFullName);

host = gethostbyname(pchar);

if (host == NULL) continue;

ptr = (struct in_addr ) host->h_addr_list[0];

string str = "";

for (int n = 0; n<4; n++)

{

CString addr;

if (n > 0)

{

str += "";

}

int value = (unsigned int)((unsigned char)host->h_addr_list[0])[n];

char p[20];

sprintf(p, "%d", value);

strappend(p);

}

std::cout <<"IP:"<< str <<" Name:"<<host->h_name<< std::endl;

}

}

}

delete Buffer;

WNetCloseEnum(hEnum);

}

WSACleanup();

}

#include<windowsh>

#include<string>

#include<cstdio>

using namespace std;

int main()

{

system("ipconfig /all");//使用运行CMDexe,并输入ipconfig /all,可得出本机所有物理地址信息(IP信息)

getchar();//获取记录信息

return 0;

}

1、企业网内部的工作站通过出口路由器的NAT转换能够上Internet网。 2、企业网(目前来说大部分是教育网)内部有一些服务器,如图中的Server,本身具有私网IP地址10003,而且需要被公网所访问,所以需要在企业网的出口处对其做静态NAT转换,将其转换为一个公网IP地址2005。企业外部的公网用户通过该服务器公网IP或解析后的域名对其进行访问,而企业内部的工作站如果使用公网上的一台DNS,那么也将使用域名对该服务器进行访问。 3、企业网(目前来说大部分是教育网)内部还有一些服务器,如图中的Game-Server,它本身具有公网IP地址,它也既需要被私网用户所访问,也需要被公网用户所访问。三、解决方案 1、常规配置: 就按照拓扑图中的配置方法,WorkStation应该是可以访问到服务器Server的,只不过需要公网路由器的参与。具体过程是WorkStation发出一个以Server的公网IP(2005)为目标地址的数据包,源地址是10002,这个数据包经过Router时,它会首先遵从路由表进行路由, 2005这个地址虽然属于运营商分给我们的一段公网IP的一部分,但由于该地址并不与任何接口同属一个网段,所以路由器只会按照缺省路由路由这个数据包到公网路由器,从物理端口向外发出时,NAT会起作用,这个数据包的源IP会被替换为2001(地址池里的第一个地址)。当公网路由器收到这个数据包时,它查目标地址所在网段,发现这个地址已经被分给该企业网,所以会遵从那条路由将该数据包发回到Router。此时这个数据包的源IP是2001,目标IP为2005,Router查NAT表发现2005这个公网IP应按照配置了的静态NAT表项转换为10003,所以当路由器把这个数据包发给Server时,数据包的目的IP就被转换成了10003,而源IP仍为2001。当Server回复这个数据包时也按照对等的方式返回WorkStation。总结地说,就是这个过程是需要公网路由器参与完成的,而公网设备对我们来说是不可控的,所以当公网路由器因为某种原因拒绝参与这个过程时(比如出口链路断),这种访问方式将变为不可行。而且数据包要在企业网与公网的路由器之间走了一个环,浪费了带宽及设备的性能资源。

采用这种方法时,我从WorkStation上用tracert命令数据包的行走路径,更清晰地反应了这一过程: C:\Documents and Settings\bluephoenix>tracert 2005 Tracing route to 2005 over a maximum of 30 hops 1 <1 ms <1 ms <1 ms 10001

2 <1 ms <1 ms <1 ms 1112

3 Request timed out

4 3 ms 3 ms 3 ms 2005 2、DNS解析 不论私网用户和公网用户他们访问服务器时实际上一般都是通过DNS来完成的。让私网用户将DNS指向私网内的一台可管理DNS也可以解决这个问题,即修改DNS中关于Server的解析记录,让其指向Server的私网IP即可,改过之后用户就可以使用通常的域名对该服务器进行访问了,只不过该过程是透明的,用户并不知道已经使用了私网IP在进行访问。 这种方法对我们来说比较轻松,没有给我们增加维护成本,请大家尽量说服用户采用这样的方法,但该方法应用场合有限,如果私网用户非要使用公网IP地址而不是域名来对Server进行访问,这种方法就行不通了,那就必须采取第三种方法。 3、loopback与策略路由法 Router的配置步骤为: (1) 建立loopback接口,随便配置一个IP地址,并将其设为ip nat ouse (2) 建立Access-list,用来匹配私网客户端访问Server以及Server做回应的数据流 (3) 定义policy-route table,设置策略缺省路由指向loopback接口,设置ip policy-route enable。 (4) 定义route-map,设定匹配Access-list的数据流都使用策略路由;并将这一route-map应用到接口。 (5) 建立一个null 0接口,并由ip nat pool所形成的路由指向null 0接口,以防止不能命中NAT规则的报文在企业网路由器和公网路由器之间震荡。(这一步不是必须的,但为了稳定起见,建议作这一步;另外只能在这种方法中使用指向null 0的路由,如果在第一种方法中使用了,那么数据包将不会在企业网路由器和公网路由器之间环游一周,而直接被陷在企业网路由器中了,将导致第一种方法失败。)

以上就是关于如何用c语言实现从某个网段中逐个取出ip地址全部的内容,包括:如何用c语言实现从某个网段中逐个取出ip地址、C语言如何实现IP地址查询系统、怎么用c或者c++代码获取默认DNS服务器的ip等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/9489017.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-28
下一篇2023-04-28

发表评论

登录后才能评论

评论列表(0条)

    保存