C,C++判断 *** 作系统是Linux,windows还是Unix

C,C++判断 *** 作系统是Linux,windows还是Unix,第1张

编译器默认的宏可以判断 *** 作系统,代码如下

#include <stdio.h>

int main(int argc,char **argv)

{

#ifdef __unix

#ifdef __linux

    printf("Linux\n")

#endif

#ifdef __sun

    #ifdef __sparc

            printf("Sun SPARC\n")

    #else

         printf("Sun X86\n")

    #endif

#endif

#ifdef _AIX

            printf("AIX\n")

#endif

#else

#ifdef WINVER

    printf("Windows\n")

#endif

#endif

return 0

}

可在编译阶段通过预定义宏判断,Windows系统g++和vs2015都预定义了_WIN32宏,Linux系统g++预定义了__linux__宏。

#if defined(__linux__)

// Linux系统

#elif defined(_WIN32)

// Windows系统

#endif

如果要进一步判断编译器,VC定义了_MSC_VER,g++定义了__GNUC__,clang编译器定义了__clang__。

首先,可以查看HTTP报头,如果是服务器是IIS,则肯定是Windows。除此之外,还可以访问站点错误路径,根据错误提示(未修改的话)判断系统。

<img src="https://pic4.zhimg.com/3caa1067b250d4eedcc4c4956a6d7b6b_b.jpg" data-rawwidth="727" data-rawheight="242" class="origin_image zh-lightbox-thumb" width="727" data-original="https://pic4.zhimg.com/3caa1067b250d4eedcc4c4956a6d7b6b_r.jpg">

如果是Apache、Nginx或其它,则无法通过此方法判断。这时我们可以ping、traceroute服务器,根据默认TTL判断服务器系统。

一般来说各系统的默认TTL:Linux:64;Windows:128;Unix:255

比如 http://centos.org ,TTL为64,有很大可能性为Linux

<img src="https://pic4.zhimg.com/f24bef221fe1298650ce2e17ac4b513b_b.jpg" data-rawwidth="597" data-rawheight="269" class="origin_image zh-lightbox-thumb" width="597" data-original="https://pic4.zhimg.com/f24bef221fe1298650ce2e17ac4b513b_r.jpg">

同样的方法,ping http://tsdm.net ,TTL为128,有很大可能性为Windows

<img src="https://pic1.zhimg.com/435befc716271a1d726f6185b7af8b10_b.jpg" data-rawwidth="582" data-rawheight="263" class="origin_image zh-lightbox-thumb" width="582" data-original="https://pic1.zhimg.com/435befc716271a1d726f6185b7af8b10_r.jpg">

ping http://java.com ,TTL为255,有很大可能性为UNIX

<img src="https://pic3.zhimg.com/90988c43b80f892a05fc84e3dd0e27c2_b.jpg" data-rawwidth="579" data-rawheight="261" class="origin_image zh-lightbox-thumb" width="579" data-original="https://pic3.zhimg.com/90988c43b80f892a05fc84e3dd0e27c2_r.jpg">

当然这种方法也不准确,服务器管理员可以出于安全考虑修改默认TTL,网站使用了CDN得到的是CDN节点信息,无法得知服务器实际使用的系统。

这只是些简单的方法,除此之外,还能使用Nmap、Xprobe2、P0F之类的软件判断。


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

原文地址: http://outofmemory.cn/yw/8943970.html

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

发表评论

登录后才能评论

评论列表(0条)

保存