
不知道您有没有学习过计算机网络。如果没有,下面简单介绍一下IP地址和掩码。
IP地址是32位的,也就是4字节。取值可以任意。
掩码也是32位的,一般建议前面的位都为1,后面的位都为0。所以本题:
(1)只要是32位的都是有效的。
(2)判断是否全1后面接全0
(3)如果掩码的前n位为1,那么此IP所在网络全部有效IP地址是此IP地址的前n位不变,后面的位从全0到全1,比如IP地址为1111掩码为FFFF0000,那么此IP地址所在网络的全部有效IP地址是从1100到11255255。
(4)两个IP地址都与掩码进行二进制与,看得到的结果是否相同,如果相同则在同一子网中,否则不在同一子网中。这个用c很容易实现。
#include "stdioh"
#include "conioh"
main()
{
int i,j;
char ip[20];
char temp[100];
char ch='\0';
FILE fp;
system("ipconfig >d:\\myiptxt");
if ((fp=fopen("d:\\myiptxt","r"))==NULL)
{
printf("the file can not open:\nPress any key to exit:");
getch();
exit(1);
}
for (i=0;i<7;i++)
{fgets(temp,80,fp); /跳过一些行/
/printf("%s\n",temp); /}
fgets(temp,80,fp);
i=0;j=0;
while (temp[i++]!=':')
;
while (temp[i]!='\n')
ip[j++]=temp[i++];
ip[j]=0;
printf("IP=%s\n",ip);
fclose(fp);
system("del d:\\myiptxt");
getch();
}
我觉得你这个需求,倒不一定非得用c语言来实现。你这个其实可以调用百度的插件,因为你在百度上输入这个IP地址的话,然后他就能查出来这个IP所在的位置,你可以用JAVA,然后调用百度的一些插件就能实现这个功能。
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();
}
我临时写吧,没有调试,主要是这什么用啊,能用来换钱么
#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的时候,就终止所有循环,您自己动动脑筋,我点到这步比较好。
}
private static string getIPAddress ( )
{
SystemNetIPAddress addr;
// 获得本机局域网IP地址
addr = new SystemNetIPAddress ( DnsGetHostByName ( DnsGetHostName ( ) ) AddressList [0]Address ) ;
return addrToString ( ) ;
}
双击btn按钮,写上 thistxttext=getIPAddress();
以上就是关于c语言编程 实现ip地址查找 方法用二进制trie全部的内容,包括:c语言编程 实现ip地址查找 方法用二进制trie、C语言能获取当前IP吗、C语言IP地址查询系统如何实现等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)