curl 发送 多个header请求。 查看 302forward


 curl -l 就是查看 302 跳转,如果输出有location 就是跳转了

 

curl -I header请求

curl 'http://pcdownyd.titan.mgtv.com/c1/2017/02/20_0/D8D30191E9D0169B092F3BAC0AE18509_20170220_1_1_387.mp4?pm=f9CSZDwu3kCac3tIUuWb1YeGXoqjlOelAFepF~cTO2kNLlpIhEf2lcEhU2wJBTvvoVjPEmtUG6wcsZ6hMI80gDz2qkkVme683WZRQgC0x~G3kIELItpR5Top5zrLxqBeOL_k4q4XJsnI0vHuoIn4LphlcuLlnfpg2yP4bkxbLJA~YFWI9nZVywqmU7U70mq7gN1u341ht6vBHZgCMQzWIbJ4lGimDCvNnpcUFu7kDgkIai7TTUbunmt69YJ~bDZQXyi0TzCS55oNv~zvq5NEUDhOXQDAG7xeXS1GzsT0abzLGHuRdDgn~V1rMZJOLi41BdIZKYJ0JNUYRzAx0k8Q_EfTlT4tsiiaqAIGPK0uq6KRwHsC&arange=0' -x 101.69.177.163:80 --head

 

get  range

curl -vo /dev/null -r 0-1 "http://dl.3366.com/down/pcgame/DST17.7z" -x 111.20.242.41:80

curl -vo /dev/null -HHost:dl.3366.com -r 0-1 "http://111.20.242.41/down/pcgame/DST17.7z"

 

不加就是get请求

 

 

刘建佐 11:52:25
分开两个header。。。
郑上浩 11:52:40
不用,直接写就行
郑上浩 11:53:26
curl -vo /dev/null -H "Host:dl.3366.com" -r 0-1 -I "http://117.139.23.41/down/pcgame/DST17.7z"
刘建佐 11:53:53
我试试
郑上浩 11:54:06
curl -vo /dev/null -H "Host:dl.3366.com" -H "user-agent:zhengsh-test" -r 0-1 -I "http://117.139.23.41/down/pcgame/DST17.7z"
郑上浩 11:54:23
要加两个header,写两个-H就行
刘建佐 11:54:40
嗯。有个问题。
刘建佐 11:54:59
[root@sh02-mon02 probe]# curl -vo /dev/null -H "Host:dl.3366.com" -r 0-1 -I "http://117.139.23.41/down/pcgame/DST17.7z"
* About to connect() to 117.139.23.41 port 80 (#0)
* Trying 117.139.23.41... connected
* Connected to 117.139.23.41 (117.139.23.41) port 80 (#0)
> HEAD /down/pcgame/DST17.7z HTTP/1.1
> Range: bytes=0-1
> User-Agent: curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.19.1 Basic ECC zlib/1.2.3 libidn/1.18 libssh2/1.4.2
> Accept: */*
> Host:dl.3366.com
>
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0< HTTP/1.1 200 OK
< Server: JSP3/2.0.14
< Date: Fri, 10 Feb 2017 03:54:28 GMT
< Content-Type: application/x-7z-compressed
< Content-Length: 443711426
< Connection: keep-alive
< ETag: "1a727fc2-53f3b6b0a22c0"
< Last-Modified: Wed, 19 Oct 2016 17:48:35 GMT
< Accept-Ranges: bytes
< Ohc-Response-Time: 0 0 36 36 205 205
<
0 423M 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0* Connection #0 to host 117.139.23.41 left intact

* Closing connection #0
[root@sh02-mon02 probe]# curl -vo /dev/null -H "Host:dl.3366.com" -H "user-agent:zhengsh-test" -r 0-1 -I "http://117.139.23.41/down/pcgame/DST17.7z"
* About to connect() to 117.139.23.41 port 80 (#0)
* Trying 117.139.23.41... connected
* Connected to 117.139.23.41 (117.139.23.41) port 80 (#0)
> HEAD /down/pcgame/DST17.7z HTTP/1.1
> Range: bytes=0-1
> Accept: */*
> Host:dl.3366.com
> user-agent:zhengsh-test
>
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0< HTTP/1.1 206 Partial Content
< Server: JSP3/2.0.14
< Date: Fri, 10 Feb 2017 03:54:30 GMT
< Content-Type: application/x-7z-compressed
< Content-Length: 2
< Connection: keep-alive
< ETag: "1a727fc2-53f3b6b0a22c0"
< Last-Modified: Wed, 19 Oct 2016 17:48:35 GMT
< Age: 172627
< Content-Range: bytes 0-1/443711426
< Accept-Ranges: bytes
< Ohc-Response-Time: 1 0 0 0 0 0
<
0 2 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0* Connection #0 to host 117.139.23.41 left intact

* Closing connection #0
刘建佐 11:55:12
就是这两个的状态码不一样。
郑上浩 11:56:51
确实是,加上-I后,有时候响应200,有时候响应206
郑上浩 11:57:09
也有响应302的
郑上浩 11:57:16
curl -vo /dev/null -H "Host:dl.3366.com" -r 0-1 "http://117.139.23.41/down/pcgame/DST17.7z"
* About to connect() to 117.139.23.41 port 80 (#0)
* Trying 117.139.23.41... connected
* Connected to 117.139.23.41 (117.139.23.41) port 80 (#0)
> GET /down/pcgame/DST17.7z HTTP/1.1
> Range: bytes=0-1
> User-Agent: curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.21 Basic ECC zlib/1.2.3 libidn/1.18 libssh2/1.4.2
> Accept: */*
> Host:dl.3366.com
>
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0< HTTP/1.1 302 Moved Temporarily
< Server: JSP3/2.0.14
< Date: Fri, 10 Feb 2017 03:56:56 GMT
< Content-Type: text/html
< Content-Length: 0
< Connection: keep-alive
< Location: http://120.198.236.36/dl.3366.com/down/pcgame/DST17.7z
< Cache-Control: no-cache
< Accept-Ranges: bytes
< Ohc-Response-Time: 0 0 0 0 141 141
<
0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0* Connection #0 to host 117.139.23.41 left intact

* Closing connection #0
刘建佐 11:57:22
。。。你知道302是啥问题么。。。
刘建佐 11:57:40
现在程序里认为206是正确的。。
郑上浩 11:57:45
这个我问一下吧,我也不太确定
刘建佐 11:57:53
好的。麻烦了啊
郑上浩 11:58:39
嗯嗯
郑上浩 12:45:29
curl -vo /dev/null -r 0-1 "http://dl.3366.com/down/pcgame/DST17.7z" -x 117.139.23.41:80
郑上浩 12:45:53
curl -vo /dev/null -r 0-1 "http://dl.3366.com/down/pcgame/DST17.7z" -x 117.139.23.41:80 -I curl -vo /dev/null -r 0-1 "http://dl.3366.com/down/pcgame/DST17.7z" -x 117.139.23.41:80 -I
郑上浩 12:45:55
curl -vo /dev/null -r 0-1 "http://dl.3366.com/down/pcgame/DST17.7z" -x 117.139.23.41:80 -I
郑上浩 12:46:03
你用这个,应该不会302
刘建佐 12:46:40
嗯你先吃饭。我一会儿试试
刘建佐 14:51:21
上浩,请教一下,对于某个加速域名。某个地区 运营商的用户,访问 被dns 查询的 ip 返回给用户,域名对应的这些dns返回的ip 经常变动。是说明这个节点的机房经常切吗?

      • 764063092 14:52:46
        如果是单ip覆盖的话
      • 764063092 14:53:01
        不应该会经常变,除非dns被劫持了
      • 764063092 14:53:13
        如果多ip覆盖,就有可能会变
      • 764063092 14:53:25
        dns缓存过期了就有可能会改变
      • 1223995142 14:53:26
        对多个ip 
      • 764063092 14:53:46
        只要是在dig出来的ip中,就是正常的
      • 1223995142 14:53:58
        恩。就是dig出来的
      • 1223995142 14:54:30
        就是我指定某个区域的客户端ip dig 
      • 764063092 14:54:44
        end?
      • 764063092 14:54:47
        ends?
        • 1223995142 14:54:51
        • 1223995142 14:56:40
          curl -vo /dev/null -r 0-1 "http://dl.3366.com/down/pcgame/DST17.7z" -x 117.139.23.41:80
        • 1223995142 14:58:39
          curl -vo /dev/null -r 0-1 "http://dl.3366.com/down/pcgame/DST17.7z" -x 117.139.23.41:80
        • 1223995142 15:07:25
          sh02-mon02.sh02 电信/移动/联通 金山-上海-bgp 120.92.230.76
        • 1223995142 15:07:32
          qd132-mon01.qd132 移动 青岛-移动 223.99.57.132
        • 1223995142 18:12:46
          上浩。
        • 764063092 18:12:59
        • 1223995142 18:13:17
          302的问题。。
        • 1223995142 18:13:30
          是移动被劫持了吗
        • 764063092 18:13:54
          因该是跨省移动运营商劫持
        • 1223995142 18:14:20
          哦哦
        • 1223995142 18:14:37
          请教一个问题哈
        • 1223995142 18:16:12
          就是dig请求某个 cname 指定客户端ip  ,dig是支持edns。 相当于获取到的几个A 记录的ip。  过一天我再次dig。又获取到的几个ip 这两次的ip不一样。
        • 1223995142 18:16:29
          个别不一样
        • 1223995142 18:16:41
          有没有这种可能。。
        • 764063092 18:16:41
          有可能改覆盖了
        • 764063092 18:16:48
          这个具体得问渠道。
        • 1223995142 18:16:49
          什么是覆盖。。。
        • 764063092 18:17:18
          就是一般一个区域运营商,cdn会用某些ip去覆盖
        • 764063092 18:17:32
          然后这个ip可以是本省的,或者是其他省的
        • 1223995142 18:18:00
          哦哦。dig到的不应该都是那个客户端ip就近的 么
        • 764063092 18:18:12
          对,最佳的是就近的
        • 1223995142 18:18:18
        • 764063092 18:18:24
          但是,资源有限
        • 1223995142 18:20:26
          就是比如说对于一个域名 在一个区域 同一个运营商 。 我3天 dig了6次,每天dig 2次, 每次的ip都记录下来了, 通过比较这三天 dig到的ip的不同 能看出什么来么。。。
        • 764063092 18:20:43
          看不出什么呀
        • 764063092 18:20:50
          你纠结这个干吗
        • 764063092 18:20:52
          干嘛
        • 764063092 18:20:58
          实际解析出来什么就是什么
        • 1223995142 18:21:02
          现在让我搞的一个项目
        • 764063092 18:21:47
          而且不同dns服务器,解析出来的ip还可能是不一样的
        • 764063092 18:22:06
          dns服务器本身有缓存,如果很久没更新的话,可能就会不一样
        • 1223995142 18:22:32
          就是提供了一些客户端ip 我隔几分钟就去 根据咱们的isure 还有域名 去获取 不同区域 运营商的节点ip 并把这次获取到的跟上次不一样的记录下来存下了。
        • 764063092 18:22:52
          哦哦
        • 764063092 18:22:56
          探测啊
        • 1223995142 18:23:04
          就是发生变化的node ip
        • 1223995142 18:23:15
        • 764063092 18:23:18
          嗯嗯
        • 1223995142 18:23:37
          我不知道 这些发生变化的node ip 我能分析出什么来
        • 764063092 18:23:46
          有让你分析嘛
        • 1223995142 18:23:57
          除了我做可用性更新这些ip
        • 1223995142 18:24:41
          比如 渠道 在各个区域 节点ip的分布
        • 1223995142 18:25:20
          我以为node ip一段时间内变化多,就是被劫持了
        • 1223995142 18:25:31
          后来看到你说能dig出来的就正常
        • 1223995142 18:26:20
          被劫持是啥。。能解释下么。
        • 1223995142 18:26:27
          比如跨省劫持
        • 1223995142 18:26:30
          那个
        • 764063092 18:27:09
          就是你的请求本来是访问a的,经过中间运营商的时候,他检查了你的请求,发现你需要的资源他这里有,然后就会把你的请求截获,用他自己的资源返回给你
        • 764063092 18:27:20
          302劫持就是一种典型的劫持
        • 1223995142 18:27:38
          哦哦。了解了

 

 

#!/usr/bin/env python
# _*_coding:utf-8_*_

import re
import os
import sys
import json
import time
import zlib
import signal
import socket
import functools
import traceback
from datetime import datetime

import tornado
import tornado.ioloop
from tornado.httpclient import HTTPRequest
from tornado.httpclient import AsyncHTTPClient

nip = sys.argv[1]
domain = sys.argv[2]

uri = sys.argv[3]
def probe():
	def async_fetch():

		method = "GET"

		ctimeout = 4
		rtimeout = 4
		headers = {'host': domain,'Range': "bytes=0-1"}
		url = "http://" + nip + "/" + uri.strip('/')

		req = HTTPRequest(url, method=method, headers=headers,
		                                connect_timeout=ctimeout, request_timeout=rtimeout,
		                                follow_redirects=False)
		handle_response_partial = functools.partial(handle_response,method)
		http_client.fetch(req, handle_response_partial)


	def handle_response(method, response):
		header_bytes_recv = 0
		body_bytes_recv = len(response.body) if response.body else 0
		headers = response.headers.get_all()

		for key, val in headers:
			header_bytes_recv += len(key) + len(val)

		time_info = response.time_info
		request = response.request
		url = request.url
		match = re.search(r'(http://|https://)([0-9|a-z|A-Z|\.|:]*)/(.*)', url)
		if not match:
			return
		dip = match.group(2)
		uri = match.group(3)
		host = request.headers['host']

		conn_time = time_info['connect'] if 'connect' in time_info else 0
		fst_pkg_time = time_info['starttransfer'] if 'starttransfer' in time_info else 0
		resp_time = fst_pkg_time - conn_time
		# success = 1 if response.code in suc_hcodes else 0

		data = {
			'node_ip': dip,
			'uri': uri,
			'domain': host,
			'http_code': response.code,
			'conn_time': conn_time,
			'resp_time': resp_time,
			'method': method,
			'header_bytes_recv': header_bytes_recv,
			'body_bytes_recv': body_bytes_recv,
		}

		print data

		if response.error:
			data['errMsg'] = response.error.message


	AsyncHTTPClient.configure("tornado.curl_httpclient.CurlAsyncHTTPClient", max_clients=100)
	ioloop = tornado.ioloop.IOLoop.instance()
	http_client = AsyncHTTPClient(io_loop=ioloop)
	async_fetch()
	tornado.ioloop.PeriodicCallback(async_fetch, 6000).start()
	ioloop.start()



if __name__ == '__main__':
	print "python test_probe_temp.py 111.20.242.41 dl.3366.com down/pcgame/DST17.7z"
	probe

 

  

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM