客户端网络劫持

DNS劫持和Http劫持

1、什么是DNS

DNS( Domain Name System)是“域名系统”的英文缩写,是一种组织成域层次结构的计算机和网络服务命名系统,它用于TCP/IP网络,它所提供的服务是用来将主机名和域名转换为IP地址的工作。DNS就是这样的一位“翻译官”,它的基本工作原理可用下图来表示。

客户端网络劫持_第1张图片

一句话就是翻译域名到ip的一个过程。

1.1、客户端常见的两种劫持:DNS和http劫持,什么是DNS劫持。

DNS劫持一般是LocalDNS劫持,什么是LocalDNS,下面标红的就是。

客户端网络劫持_第2张图片

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);


域名请求失败之后用ip请求

1.3 看完之后,问题1?为什么要验证域名是否解析失败?

问题2?域名解析成功后就一定没有被劫持吗?

问题3?是不是需要添加一步来验证得到的ip正确性?

2、http劫持

客户端网络劫持_第3张图片

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

你可能感兴趣的:(客户端网络劫持)