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之类的软件判断。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)