gpt4 book ai didi

.net - 从 Internet Explorer 检索所有 cookie

转载 作者:行者123 更新时间:2023-12-04 01:12:27 26 4
gpt4 key购买 nike

我正在尝试检索与我打开的特定页面相关联的所有 cookie(我已经通过身份验证)。有几个与网页相关联的 cookie,我需要检索每个 cookie 以便稍后进行 POST。

我尝试了几种方法,但没有一个给我完整的列表。到目前为止,我已经用 VBA 编写了代码,但我对它在 .NET 中也很满意。

第一次尝试,在获得指向 IE 的指针后。

arraycookie = Split(ie.document.Cookie, ";")

For i = LBound(arraycookie) To UBound(arraycookie)
Debug.Print arraycookie(i)
Next i

这给了我一些 cookies ,但不是全部。我可以在开发人员工具 (F12) 中查看 cookie,并且我确认没有 cookie 标记了 HTTP only Flag。见下图。

No HTTP Only Flag

我还尝试了 InternetGetCookie windows API。它返回一个 cookie,但只有一个,无论名称是什么,它都是相同的(例如下面的 FedAuth)。
Private Sub GetCookieAttempt()
Dim sCookieVal As String * 256
Dim bRet As Boolean
bRet = InternetGetCookie("https://mywebsiteaddresshere.com", _
"FedAuth", sCookieVal, 255)
If bRet = False Then
MsgBox "Failed"
Else
MsgBox sCookieVal
End If
End Sub

这只是一个猜测(知道我怎么知道吗?),但从我读到的内容来看,cookie 可能是 protected 。我查看了 IEGetProtectedModeCookie API,但我无法让它返回 cookie 信息。

不知道为什么我可以通过开发人员工具看到这一点,但是当我尝试公开信息时,它并没有返回所有内容。

任何帮助将不胜感激 :)

谢谢!

编辑

因此,在深入研究此问题后,我想我会使用不同的浏览器尝试相同的网页并再次查看 cookie 详细信息。

使用 Firebug,我试图检索的 cookie 现在显示 HTTPOnly 标志。据我了解,我可以将 InternetGetCookieEx 与指定的 INTERNET_COOKIE_HTTPONLY 标志一起使用。但是我无法让它返回任何东西。

有没有人有我可以遵循的工作样本?

最佳答案

尝试从 shell:cookies 检索 IE cookie文件夹。以下面的代码为例:

Option Explicit

Sub GetIECookies()

Dim sCookiesPath As String
Dim oCookies As Object
Dim oFSO As Object
Dim oFolder As Object
Dim oFile
Dim sContent As String
Dim a() As String
Dim i As Long
Dim aItems
Dim aCookies()

' read IE cookie files
sCookiesPath = CreateObject("shell.application").Namespace("shell:Cookies").self.Path
Set oCookies = CreateObject("Scripting.Dictionary")
Set oFSO = CreateObject("Scripting.FileSystemObject")
Set oFolder = oFSO.GetFolder(sCookiesPath)
For Each oFile In oFolder.Files
If LCase(oFSO.GetExtensionName(oFile.Name)) = "txt" Then
With oFile.OpenAsTextStream(1, 0) ' read-only, ascii
sContent = .ReadAll
.Close
End With
sContent = Replace(sContent, vbCr, "")
' split cookies within file
a = Split(sContent, vbLf & "*" & vbLf)
For i = 0 To UBound(a) - 1
oCookies.Add oCookies.Count, a(i)
Next
End If
Next
' parse data, repack to 2d array
aItems = oCookies.Items()
If UBound(aItems) = -1 Then
MsgBox "No cookies found"
Else
ReDim aCookies(1 To UBound(aItems) + 1, 1 To 6)
For i = 1 To UBound(aItems) + 1
a = Split(aItems(i - 1), vbLf)
aCookies(i, 1) = a(0)
aCookies(i, 2) = a(1)
aCookies(i, 3) = a(2)
aCookies(i, 4) = GetInetCookieFlags(a(3))
aCookies(i, 5) = ConvDT(a(4), a(5))
aCookies(i, 6) = ConvDT(a(6), a(7))
Next
' output
With ThisWorkbook.Sheets(1)
.Cells.Delete
.Range("A1:F1") = Array("Name", "Value", "Host/Path", "Flags", "Expiration", "Created")
Output .Range("A2"), aCookies
End With
End If

End Sub

Function ConvDT(sLowNTFmt As String, sHighNTFmt As String) As Date

Dim dNTFmt As Double
Dim dUnixFmt As Double

' FILETIME format is the number of 100 nanosecond ticks since 00:00 1 Jan, 1601 (UTC).
dNTFmt = sHighNTFmt * 4294967296# + sLowNTFmt
' Unix time format is the number of seconds since 00:00 1 Jan 1970
dUnixFmt = 0.0000001 * dNTFmt - 11644473600#
' VB time format is the number of days since 00:00 1 Jan 1900
ConvDT = CDate(dUnixFmt / 86400 + 25569)

End Function

Function GetInetCookieFlags(sFlags As String) As String

Dim lFlags As Long
Dim aFlag

' reset bit 32 to avoid overflow
If sFlags >= 2147483648# Then lFlags = CLng(sFlags - 2147483648#) Else lFlags = CLng(sFlags)
' convert flags bits to string representation
With CreateObject("Scripting.Dictionary")
For Each aFlag In Array( _
Array(&H1, "IS SECURE"), _
Array(&H2, "IS SESSION"), _
Array(&H10, "THIRD PARTY"), _
Array(&H20, "PROMPT REQUIRED"), _
Array(&H40, "EVALUATE P3P"), _
Array(&H80, "APPLY P3P"), _
Array(&H100, "P3P ENABLED"), _
Array(&H200, "IS RESTRICTED"), _
Array(&H400, "IE6"), _
Array(&H800, "IS LEGACY"), _
Array(&H1000, "NON SCRIPT"), _
Array(&H2000, "HTTPONLY"), _
Array(&H4000, "HOST ONLY"), _
Array(&H8000, "APPLY HOST ONLY"), _
Array(&H20000, "RESTRICTED ZONE"), _
Array(&H20000000, "ALL COOKIES"), _
Array(&H40000000, "NO CALLBACK"), _
Array(&H80000000, "ECTX 3RDPARTY") _
)
If lFlags And aFlag(0) Then .Add .Count, aFlag(1)
Next
GetInetCookieFlags = Join(.Items(), vbCrLf)
End With

End Function

Sub Output(oDstRng As Range, aCells As Variant)

With oDstRng
.Parent.Select
With .Resize( _
UBound(aCells, 1) - LBound(aCells, 1) + 1, _
UBound(aCells, 2) - LBound(aCells, 2) + 1 _
)
.NumberFormat = "@"
.Value = aCells
.Columns.AutoFit
End With
End With

End Sub

删除所有 cookie 并导航到 https://stackoverflow.com/ 后的输出如下:

output

关于代码的一些注意事项。

它解析 Cookies\ 中的文件仅文件夹,但不在 Cookies\Low\这适用于在低权限下运行的应用程序。它仅检索存储在文件夹中的持久性 cookie,而不检索 session cookie,后者存储在内存中并且只能由创建它们的进程访问。时间是 UTC。

文件中cookie的结构如下:

Cookie name
Cookie value
Host/path for the web server setting the cookie
Flags
Exirpation time (low)
Expiration time (high)
Creation time (low)
Creation time (high)
Record delimiter (*)

标志按照 wininet.dll headers 定义:

#define INTERNET_COOKIE_IS_SECURE                0x00000001
#define INTERNET_COOKIE_IS_SESSION 0x00000002
#define INTERNET_COOKIE_THIRD_PARTY 0x00000010
#define INTERNET_COOKIE_PROMPT_REQUIRED 0x00000020
#define INTERNET_COOKIE_EVALUATE_P3P 0x00000040
#define INTERNET_COOKIE_APPLY_P3P 0x00000080
#define INTERNET_COOKIE_P3P_ENABLED 0x00000100
#define INTERNET_COOKIE_IS_RESTRICTED 0x00000200
#define INTERNET_COOKIE_IE6 0x00000400
#define INTERNET_COOKIE_IS_LEGACY 0x00000800
#define INTERNET_COOKIE_NON_SCRIPT 0x00001000
#define INTERNET_COOKIE_HTTPONLY 0x00002000
#define INTERNET_COOKIE_HOST_ONLY 0x00004000
#define INTERNET_COOKIE_APPLY_HOST_ONLY 0x00008000
#define INTERNET_COOKIE_RESTRICTED_ZONE 0x00020000
#define INTERNET_COOKIE_ALL_COOKIES 0x20000000
#define INTERNET_COOKIE_NO_CALLBACK 0x40000000
#define INTERNET_COOKIE_ECTX_3RDPARTY 0x80000000

关于.net - 从 Internet Explorer 检索所有 cookie,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38726408/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com