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