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与域名片段的更多相关文章
- 【ASP.NET】#001 获取服务器IP
客户端ip: Request.ServerVariables.Get("Remote_Addr").ToString(); 客户端主机名: Request.ServerVariab ...
- Linux C 网络编程 - 获取本地 ip 地址,mac,通过域名获取对应的 ip
获取本地 ip 地址,mac,通过域名获取对应的 ip, 是网络编程可能遇到的比较常见的操作了,所以总结如下(封装了3个函数), 直接上代码: #include <stdio.h> #in ...
- 【Nginx】如何获取客户端真实IP、域名、协议、端口?看这一篇就够了!
写在前面 Nginx最为最受欢迎的反向代理和负载均衡服务器,被广泛的应用于互联网项目中.这不仅仅是因为Nginx本身比较轻量,更多的是得益于Nginx的高性能特性,以及支持插件化开发,为此,很多开发者 ...
- 编写Java程序,根据提供的 IP 地址,获取主机名称和域名
查看本章节 查看作业目录 需求说明: 根据提供的 IP 地址,获取主机名称和域名 实现思路: 创建 GetHostNameByIpAddress 类,在main方法中声明 String 类型的变量 i ...
- 域名可以解析(ping域名可以获取正确ip),服务器本地telnet 域名+端口 无法连接,通过建立本地虚拟域名指定的方法解决该问题
环境: 服务器A,网管已为A开通外网ip,且设置有映射域名:假如内网ip为172.16.2.6.外网ip为123.123.123.123.域名为test.sstest.com 现象: 服务器A,tel ...
- Linux下的C Socket编程 -- 获取对方IP地址
Linux下的C Socket编程(二) 获取域名对应的IP地址 经过上面的讨论,如果我们想要连接到远程的服务器,我们需要知道对方的IP地址,系统函数gethostbyname便能够实现这个目的.它能 ...
- 一个服务器上面配置多个IP ,实现指定IP的域名请求
//配置多个IP命名using System.Net; //********************************************************************** ...
- nginx 反向代理 取得真实IP和域名
nginx反向代理后,在应用中取得的ip都是反向代理服务器的ip,取得的域名也是反向代理配置的url的域名,解决该问题,需要在nginx反向代理配置中添加一些配置信息,目的将客户端的真实ip和域名传递 ...
- 再论 ASP.NET 中获取客户端IP地址
说到IP获取无非是我们常见的以下几种方式,但是具体获取的值具体区别在哪?网上不乏相关文章,说的也是很详细,但是真正使用起来,还有很多不太对的地方.IP在不同系统中,应用相当广泛,常见的日志记录.广告分 ...
- c#中HttpWebRequest使用Proxy实现指定IP的域名请求
原文:http://www.cnblogs.com/greenerycn/archive/2010/04/11/httpwebreques_host_modify_By_set_proxy.html ...
随机推荐
- Grafana--变量(label_values)
grafana官方文档:https://grafana.com/docs/grafana/latest/ 版本:6.5.2 模板与变量(摘抄自官方文档): 变量是值的占位符.您可以在度量查询和面板标题 ...
- 【JAVA基础】Mybatis示例
固定时间范围查询 <select id="selectPaidList" resultType="com.hand.htms.ifp.entity.IfpShipm ...
- 【辅助工具】SVN使用
1.在对应路径下右键SVN checkout 2.输入对应的网址.用户名.密码 3.提交右键选择SVN commit.覆盖选择SVN update 4.编辑的时候右键TortoiseSVN-get l ...
- 【每日一题】20.K-th Number (二分 + 尺取)
关于此题,我们分析一下: 一个区间第k大的数不小于x的条件是什么? 答案就是一个区间内不小于x的数的个数不小于k 那么,我们就会发现,我们其实并不需要知道每个数的值,实际上对我们有用的只有每个数与x的 ...
- 如何让 Llama2、通义千问开源大语言模型快速跑在函数计算上?
本文是"在Serverless平台上构建AIGC应用"系列文章的第一篇文章. 前言 随着ChatGPT 以及 Stable Diffusion,Midjourney 这些新生代 A ...
- vue <a>标签 href 是参数的情况下如何使用
想在页面中使用a标签打开一个新页面进行跳转 例如:msgZi.blogAddress 的值是 https://www.baidu.com 正确的写法: <a :href="goBlog ...
- 【内核】深入分析内核panic(二)--内核中的少林扫地僧-NMI Watchdog Timer
没有完美的代码 没有完美的人,更没有完美的代码.虽然教科书上说deadlock(死锁)多么不好不好,但是在现实生活中,很难把它完全消灭.假设不小心内核出现了deadlock,可能你得干瞪眼.CPU就在 ...
- P5730
这道题莫名其妙的在本地能过可是洛谷上却0分,把WA的点下载下来之后发现我输出的和他要输出的明明一模一样,说明洛谷的评测有一些问题.我把getchar输入换成cin输入后就AC了,说明洛谷对getcha ...
- windows10测试时如何构造大图片(如超过8M+的图片)
1.原图片(大小40k) 2. 选怎一个容量大的文件如视频文件8M+ 3.使用copy命令进行扩容(cmd命令行操作): copy test01.jpg /b + 8M.MP4 test01_8M.j ...
- Oracle实例的启动和关闭
启动模式 1.NoMount 模式(启动实例不加载数据库) 命令:startup nomount 讲解:这种启动模式只会创建实例,并不加载数据库,Oracle仅为实例创建各种内存结构和服务进程,不会打 ...