C/C++ 获取自身IP与域名片段的示例代码

判断大端序小端序:

通常情况下,数值在内存中存储的方式有两种,一种是大尾字节序,另一种是小尾,比如0x01020304这样一个数值,如果用大尾方式存储,其存储方式为01 02 03 04而用小尾方式存储则是04 03 02 01,一般Windows操作系统兼容的CPU为小尾方式,而UNIX操作系统所兼容的CPU多为大尾方式,通过使用两种方法即可判断大小纬。

#include <stdio.h>
#include <stdlib.h>
#include <WinSock2.h>
#pragma comment(lib, "ws2_32.lib")

// 变量法判断
void GetA()
{
	DWORD dwSmallNum = 0x01020304;
	if (*(BYTE *)&dwSmallNum == 0x04)
		printf("小端字节序 \n");
	else
		printf("大端字节序 \n");
}

// 直接转换法判断
void GetB()
{
	DWORD dwSmallNum = 0x01020304;
	if (dwSmallNum == htonl(dwSmallNum))
		printf("大端字节序 \n");
	else
		printf("小端字节序 \n");
}

int main(int argc, char *argv[])
{
	GetA();
	GetB();

	system("pause");
	return 0;
}

利用域名获取IP:

通过使用winsocket库中的gethostbyname()可以将一个域名所对应的别名,地址类型等信息提取出来。

#include <stdio.h>
#include <stdlib.h>
#include <WinSock2.h>
#pragma comment(lib, "ws2_32.lib")

BOOL GetHostByName(char * HostName)
{
	WSADATA wsaData;
	if (WSAStartup(MAKEWORD(2, 2), &wsaData) != 0)
		return FALSE;

	struct hostent *ptr = gethostbyname(HostName);
	if (!ptr){ return FALSE; }

	printf("地址类型: %s \n", (ptr->h_addrtype == AF_INET) ? "IPV4" : "IPV6");

	for (int i = 0; ptr->h_aliases[i]; i++){
		printf("别名 [%d]: %s \n", i + 1, ptr->h_aliases[i]);
	}

	for (int i = 0; ptr->h_addr_list[i]; i++){
		printf("IP地址 [%d]: %s \n", i + 1, inet_ntoa(*(struct in_addr*)ptr->h_addr_list[i]));
	}
	WSACleanup();
	return TRUE;
}

int main(int argc ,char *argv[])
{
	GetHostByName("www.baidu.com");
	system("pause");
	return 0;
}

取自身主机名IP地址:

有时候我们需要得到自身IP地址,这里我封装了两种获取IP地址的方法。

#include <stdio.h>
#include <stdlib.h>
#include <WinSock2.h>
#pragma comment(lib, "ws2_32.lib")

char * GetLocalHostName()
{
	WSADATA wsaData;
	HOSTENT *pHost;
	char szHostName[256];

	if (WSAStartup(MAKEWORD(2, 2), &wsaData) != 0)
		exit(0);

	if (gethostname(szHostName, 256) == 0)
	{
		char *Host;
		Host = (char *)malloc(1024);
		pHost = gethostbyname(szHostName);
		strcpy(Host, pHost->h_name);
		return Host;
	}
	return "";
}

char * GetLocalHostAddr(int Count)
{
	WSADATA wsaData;
	HOSTENT *pHost;
	char szHostName[256];

	if (WSAStartup(MAKEWORD(2, 2), &wsaData) != 0)
		exit(0);

	if (gethostname(szHostName, 256) == 0)
	{
		char tmp[15];
		char *Addr;
		pHost = gethostbyname(szHostName);
		int index = 0;

		for (; index < 10; index++)
		{
			if (pHost->h_addr_list[index] == NULL)
				break;
		}

		sprintf(tmp, "%d.%d.%d.%d",
			pHost->h_addr_list[0][0] & 0xff,
			pHost->h_addr_list[0][1] & 0xff,
			pHost->h_addr_list[0][2] & 0xff,
			pHost->h_addr_list[0][3] & 0xff);

		Addr = (char *)malloc(15);
		strcpy(Addr, tmp);
		return Addr;
	}
	return "";
}

int main(int argc, char *argv[])
{
	char *hostname = GetLocalHostName();
	printf("本机名字: %s \n", hostname);

	char *hostaddr = GetLocalHostAddr(0);
	printf("本机IP: %s \n", hostaddr);

	system("pause");
	return 0;
}

以上就是C/C++ 获取自身IP与域名片段的示例代码的详细内容,更多关于C/C++ 获取自身IP与域名片段的资料请关注我们其它相关文章!

(0)

相关推荐

  • c/c++实现获取域名的IP地址

    c/c++实现获取域名的IP地址 // GetHostIP.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <winsock2.h> #include <ws2tcpip.h> #include <stdio.h> #include <windows.h> #pragma comment(lib, "ws2_32.lib") int main(int argc,

  • C++取得本机IP的方法

    本文实例讲述了C++取得本机IP的方法,分享给大家供大家参考.具体方法如下: 核心代码如下: 复制代码 代码如下: //取得本机IP,在状态栏中显示  char szHostName[MAX_PATH] = {0};  ::gethostname(szHostName, MAX_PATH);  hostent *pHost = gethostbyname(szHostName);  if (pHost != NULL)  {      CString strIP;      in_addr* a

  • C++获得本机所有网卡的IP和MAC地址信息的实现方法

    一台机器上可能不只有一个网卡,但每一个网卡只有一个MAC地址,而每一个网卡可能配置有多个IP地址:如平常的笔记本电脑中,就会有无线网卡和有线网卡(网线接口)两种:因此,如果要获得本机所有网卡的IP和MAC地址信息,则必须顺序获得每个网卡,再依次获取其信息等:在windows sdk中,用IP_ADAPTER_INFO结构体存储网卡信息,包括网卡名.网卡描述.网卡MAC地址.网卡IP等,该结构体的主要描述如下所示: typedef struct _IP_ADAPTER_INFO { struct

  • C++获取本机MAC,IP,MASK地址的方法

    本文实例讲述了C++获取本机MAC,IP,MASK地址的方法,分享给大家供大家参考.具体方法如下: 复制代码 代码如下: #include "InitSock.h"  #include <stdio.h>    #include <iphlpapi.h>  #pragma comment(lib, "IPHLPAPI.lib")    u_char g_ucLocalMac[6];  DWORD g_dwGatewayIP;  DWORD g

  • C++如何获取系统信息 C++获取IP地址、硬件信息等

    本文实例为大家分享了C++获取系统信息的具体代码,供大家参考,具体内容如下 #include<stdio.h> #include<winsock2.h> //该头文件需在windows.h之前 #include<windows.h> #include<string> #include<iostream> #pragma comment(lib,"ws2_32.lib") using namespace std; void ge

  • C++如何获取本机的IP地址

    本文为大家分享了C++获取本机的ip地址程序,供大家参考,具体内容如下 头文件 #include <WinSock2.h> #pragma comment(lib,"ws2_32")//链接到ws2_32动态链接库 class CInitSock { public: CInitSock(BYTE minorVer = 2,BYTE majorVer = 2) { WSADATA wsaData; WORD VersionRequset; VersionRequset = M

  • C++实现获取IP、子网掩码、网关、DNS等本机网络参数的方法

    本文以一个完整实例形式介绍了C++实现获取IP.子网掩码.网关.DNS等本机网络参数的方法,供大家参考,具体的完整实例如下: #pragma comment(lib,"Ws2_32.lib") #include <Iphlpapi.h> #pragma comment(lib, "Iphlpapi.lib") using namespace std; typedef struct tagNetworkCfg { char szIP[18]; char s

  • C++实践IP地址类项目参考

    [项目-IP地址类] 在互联网中使用的IP地址占4字节,可以用四段法表示,每段值的范围为0-255,中间用"."隔开,例如202.194.116.97.其实,也可以看看一个有4字节的无符号整型值3401741409. 现设计一个IP地址类,用于保存IP地址,并实施在IP地址上的一些操作.如下所示: class IP { private: union //由此匿名联合体可以看出,IP地址共占4个字节 { struct //这是一个由4个字节构成的匿名结构体 { unsigned char

  • C/C++ 获取自身IP与域名片段的示例代码

    判断大端序小端序: 通常情况下,数值在内存中存储的方式有两种,一种是大尾字节序,另一种是小尾,比如0x01020304这样一个数值,如果用大尾方式存储,其存储方式为01 02 03 04而用小尾方式存储则是04 03 02 01,一般Windows操作系统兼容的CPU为小尾方式,而UNIX操作系统所兼容的CPU多为大尾方式,通过使用两种方法即可判断大小纬. #include <stdio.h> #include <stdlib.h> #include <WinSock2.h&

  • C#获取本地IP的四种方式示例详解

    1.第一种方式 采用System.Net.Dns的GetHostAddress的方式,具体请看代码: /// <summary> /// 网络不通畅可以获取 /// 不过能获取到具体的IP /// </summary> /// <returns></returns> public static List<IPAddress> GetByGetHostAddresses() { try { IPAddress[] adds = Dns.GetHos

  • java IP地址网段计算的示例代码

    根据IP地址与字段掩码计算网段最大最小IP package c04; import java.net.UnknownHostException; public class IPNetworkSegmentCalculation { public static void main(String[] args) throws UnknownHostException { String ip = "192.168.126.2"; String mask = "255.255.255

  • php实现统计IP数及在线人数的示例代码

    写在前面的话 很多人有这样的需求,就是统计网站访问IP以及在线的人数.今天我们就看一下具体实现方法. 开启依赖函数模块 实现这个功能,需要依赖putenv()函数.下面两种方式均可. 更改php.ini文件方法 找到php.ini文件,搜索putenv关键字,删除即可. isable_functions = passthru,exec,system,putenv,chroot,chgrp,chown,shell_exec,popen,proc_open,pcntl_exec,ini_alter,

  • c# 获取照片的经纬度和时间的示例代码

    public List<string> GetXYFromPic(String jpgPath) { List<string> sXY = new List<string>(); try { //载入图片 Image objImage = Image.FromFile(jpgPath); //取得所有的属性(以PropertyId做排序) var propertyItems = objImage.PropertyItems.OrderBy(x => x.Id);

  • php获取客户端IP及URL的方法示例

    本文实例讲述了php获取客户端IP及URL的方法.分享给大家供大家参考,具体如下: function getonlineip(){//获取用户ip if($_SERVER['HTTP_CLIENT_IP']) { $onlineip=$_SERVER['HTTP_CLIENT_IP']; //用户IP } else if($_SERVER['HTTP_X_FORWARDED_FOR']) { $onlineip=$_SERVER['HTTP_X_FORWARDED_FOR']; //代理IP }

  • Android实现IP地址输入框的方法示例代码

    前言 本文主要给大家介绍了关于Android实现IP地址格式输入框的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧. 实现效果图: 解决方案: 1.添加4个EditText和三个TextView 2.设置TextView内容为点,且靠下方.设置EditText背景和边框为透明 3.为每个EditText添加监听事件 示例代码 Layout: <LinearLayout android:layout_width="match_parent" android

  • Flutter中获取屏幕及Widget的宽高示例代码

    前言 我们平时在开发中的过程中通常都会获取屏幕或者 widget 的宽高用来做一些事情,在 Flutter 中,我们有两种方法来获取 widget 的宽高. MediaQuery 一般情况下,我们会使用如下方式去获取 widget 的宽高: final size =MediaQuery.of(context).size; final width =size.width; final height =size.height; 但是如果不注意,这种写法很容易报错,例如下面的写法就会报错: impor

  • Flex通过JS获取客户端IP和计算机名的实例代码

    首先说明一下,用JS方式获取不是调用webservices和httpservices. 在我们每一个FLex web工程中,都有那么一个文件夹bin-debug,里面有个index.html文件,我的个人理解是这样的,首先网页运行的时候,mxml的文件会被编译为swf,那么swf如何在浏览器中展现,就是通过这个html文件,相当于在html文件中嵌入了一个swf的object组件. www.jb51.net 所以,在这个html中写入js的代码,来获取ip地址我个人觉得是可行的.因此出现以下代码

  • FLEX 获取DataGrid行号和列号示例代码

    一.获取行号 复制代码 代码如下: var findex:Number = Math.floor(dg.contentMouseY/dg.rowHeight)-1 + dg.verticalScrollPosition; //dg.contentMouseY是鼠标所在的local坐标系相对于datagrid的高度 //dg.rowHeight是datagrid的行高,math.floor作用是截断小数点 //verticalScrollPosition是如果datagrid有滚动条的话,向下滚动

随机推荐