
我临时写吧,没有调试,主要是这什么用啊,能用来换钱么
#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等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)