DNS劫持和Http劫持
1、什么是DNS
DNS( Domain Name System)是“域名系统”的英文缩写,是一种组织成域层次结构的计算机和网络服务命名系统,它用于TCP/IP网络,它所提供的服务是用来将主机名和域名转换为IP地址的工作。DNS就是这样的一位“翻译官”,它的基本工作原理可用下图来表示。
一句话就是翻译域名到ip的一个过程。
1.1、客户端常见的两种劫持:DNS和http劫持,什么是DNS劫持。
DNS劫持一般是LocalDNS劫持,什么是LocalDNS,下面标红的就是。
1.2 LocalDNS 域名到ip的过程遭到修改,有什么办法呢?
有的 ,请求之前先判断域名解析是否成功。
解析成功之后再判断 解析的结果是否正确。
如何解析域名,域名是否能正确解析成功。
Boolean result,bResolved;
CFHostRef hostRef;
CFArrayRef addresses = NULL;
CFStringRef hostNameRef = CFStringCreateWithCString(kCFAllocatorDefault, "www.baidu.com", kCFStringEncodingASCII);
hostRef = CFHostCreateWithName(kCFAllocatorDefault, hostNameRef);
if (hostRef) {
result = CFHostStartInfoResolution(hostRef, kCFHostAddresses, NULL);
if (result == TRUE) {
addresses = CFHostGetAddressing(hostRef, &result);
}
}
bResolved = result == TRUE ? true : false;
if(bResolved)
{
struct sockaddr_in* remoteAddr;
for(int i = 0; i < CFArrayGetCount(addresses); i++)
{
CFDataRef saData = (CFDataRef)CFArrayGetValueAtIndex(addresses, i);
remoteAddr = (struct sockaddr_in*)CFDataGetBytePtr(saData);
if(remoteAddr != NULL)
{
//获取IP地址
char ip[16];
strcpy(ip, inet_ntoa(remoteAddr->sin_addr));
}
}
}
CFRelease(hostNameRef);
CFRelease(hostRef);
1.3 看完之后,问题1?为什么要验证域名是否解析失败?
问题2?域名解析成功后就一定没有被劫持吗?
问题3?是不是需要添加一步来验证得到的ip正确性?
2、http劫持
2.1 什么是http劫持?
一句话概括 :网络运营商搞的鬼。
2.2 HTTPS一般不会劫持
http://www.cnblogs.com/kenkofox/p/4919668.html
参考资料
http://369369.blog.51cto.com/319630/812889/
http://nszzy.me/2016/09/07/dns-resolving/
http://www.jianshu.com/p/a8a8ff984f2e
http://www.williamlong.info/archives/4181.html
http://bigsec.com/bigsec-news/wechat-16824-yunyingshangjiechi
网友评论