在正常的tcp/ip协议中是很难伪造ip的,因为在tcp/ip正式通信之前是有一个三次握手的过程,通过三次握手建立了tcp/ip连接之后再进行正常的通信,所以我之前想用python的scapy库来伪造其他ip的请求包,但是因为三次握手的时候,我的ip是伪造的,我发出去的请求包就没有办法正确的返回找到我,所以无法三次握手就没有tcp/ip正常通信,就失败了。
只要能够在tcp/ip层伪造ip,就是完全的伪造ip,没有任何办法判断,不过我这次的是在http层伪造ip,所以还是可能被发现的,而且也只有在http协议中有用,无法利用在其他地方。
那么如何在http层伪造协议呢?我们先来了解一些http请求中的请求头header,比如说我们在chrome中登陆百度,打开chrome的开发者工具,查看network,就能够看到这次请求百度的header请求头。
Requests Headers
- Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
- Accept-Encoding:gzip, deflate, sdch
- Accept-Language:zh-CN,zh;q=0.8
- Connection:keep-alive
- Cookie:BIDUPSID=XXX; PSTM=XXX; BAIDUID=XXX:FG=1; BDUSS=XXX; __cfduid=XXX; ispeed_lsm=2; BD_HOME=1; BDRCVFR[Ups602knC30]=XXX; BD_CK_SAM=1; H_PS_PSSID=XXX; BD_UPN=XXX; H_PS_645EC=XXX; locale=XXX; BDSVRTM=0; BD_LAST_QID=XXX
- Host:www.baidu.com
- Upgrade-Insecure-Requests:1
- User-Agent:Mozilla/5.0 (X11; Linux i686) AppleWebKit/537.36 (KHTML, like Gecko) Ubuntu Chromium/49.0.2623.108 Chrome/49.0.2623.108 Safari/537.36
可以看到这里有很多的请求参数,在我们打开百度的时候,我们先要向百度服务器发送一个请求,而这个请求包含很多附加的关于我们自己的信息,比如说浏览器信息,cookie,接受数据格式等等,百度服务器收到我们的请求之后,返回给我们百度的页面。
在我们发送http请求之前,就已经先进行了tcp/ip三次握手,然后再发送http请求,三次握手的过程是非常迅速的,可以用抓包工具 wireshark 查看。
所以 header 请求头主要是一些我们发送请求时附带的我们自己的信息,同时,在看到 header 请求头的时候,也会发现在服务器返回数据的时候也会带有一个 header ,这是返回数据格式的一些信息,包括返回数据的格式,大小,时间等。
阅读剩余部分 -