【问题标题】:Script to determine if an HTTP reponse is from intended domain用于确定 HTTP 响应是否来自预期域的脚本
【发布时间】:2010-06-22 20:47:05
【问题描述】:

我正在尝试编写一个脚本,它将向 URL 发送 HTTP“GET”,然后确定响应是否来自同一个域。

我一直在玩 VBS 和 WinHttp.WinHttpRequest.5.1 对象。可悲的是,这并没有让我了解响应的确切来源。

我尝试解析响应标头,但只有当网络服务器设置一个包含服务器域的 cookie 时才会产生结果。例如(在我下面的脚本中)“google.com”会通过,但“avg.com”会失败。

我不太喜欢我目前的剧本,如果有人知道更好的方法,我很乐意改变。

我当前的脚本:

  Dim objWinHttp
  Dim strContent, strURL
  Set objWinHttp = CreateObject("WinHttp.WinHttpRequest.5.1")
  objWinHttp.SetTimeouts 29000, 29000, 29000, 29000
  objWinHttp.Option(0) = "Website_monitor_light/1.0"
  objWinHttp.Option(6) = True
  If (InStr(WScript.Arguments.Item(0), "www.") = 1) Then
   URL = "http://" & WScript.Arguments.Item(0)
  Else
   URL = "http://www." & WScript.Arguments.Item(0)
  End If
  objWinHttp.Open "GET", URL
  On Error Resume Next
  objWinHttp.Send()
  If (objWinHttp.Status = 200) Then
   strContent = objWinHttp.GetAllResponseHeaders
  End If
  Wscript.Quit InStr(strContent, "domain=." & Mid(URL,12))

谢谢一百万。

【问题讨论】:

    标签: http scripting vbscript winhttprequest


    【解决方案1】:

    听起来您只是希望 WinHttpRequest 对象不自动跟随重定向响应。查看WinHttpRequestOption_EnableRedirects 选项。此项默认设置为 TRUE,您需要将其关闭。

    【讨论】:

    • 但是如果...(对于“假设”问题感到抱歉)...如果 DNS 查找出现问题并且我的请求得到了某个奇怪服务器的响应怎么办?这就是我希望能够检测到的。
    • HTTP 协议中没有任何东西可以缓解这种情况。如果远程服务器响应肯定,您无法判断响应是否“合法”(这是 https 可以帮助您的)。如果您想针对特定的 DNS 服务器故障执行某种检查,那么您可以执行多个 DNS 查找,可能与 Google 在 8.8.8.8 和 8.8.4.4 上的 DNS 服务器进行比较
    • 在那个级别,唯一正确的做法是对原始请求使用 HTTPS。
    • 那有没有办法判断哪个 IP 响应了请求?
    • 不要使用IP,那是完全可以欺骗的。进行 HTTPS 响应,然后检查(理想情况下)响应证书的密钥指纹(我认为;我不了解详细信息)。不太安全,您可以检查证书中的域名是否符合您的预期并检查证书是否有效。 (这就是普通网络浏览器所做的。)
    猜你喜欢
    • 2016-03-22
    • 1970-01-01
    • 2019-02-12
    • 2011-12-07
    • 2011-03-21
    • 2017-03-26
    • 2011-01-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多