如果截取软件内webbrowser发出去的封包?

dzz028 2010-02-07 12:41:42
在应用程序内,有一个webbrowser。我现在再想办法截取他发出去的封包(截取封包的操作也在这个应用程序内完成,如果做不到分开二个程序也行)。

不需要修改封包,截取就行了。

大家能不能告诉我思路?能有例子更好。或者说哪个dll有此功能那就更好了。

上次在csdn好像看到有人成功截取了webbrowser的封包,可惜我当时没细看。也没记下网址。



我现在有几种方案:
1.raw socket :这个方案正在尝试中...暂时没成功,我怀疑这样截取到的包会不会太多,导致性能下降。

2.给webbrowser弄个代理,代理到“127.0.0.1”某个端口,然后socket侦听此端口。 :此方案为备选方案,准备尝试

3.HOOK API :这个也暂时没有尝试,貌似做起来会花很多时间

4.看能不能设置或获取webbrowser的使用端口,然后socket侦听此端口。 :备选方案,但是不知如何设置或获取webbrowser的使用端口


看大家有没有更好的提议。
...全文
454 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
ckl881003 2010-02-08
  • 打赏
  • 举报
回复
引用 2 楼 wuyq11 的回复:
httpwatch
dzz028 2010-02-07
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 wuyq11 的回复:]
httpwatch
[/Quote]

我是要用程序捕获。而不是使用第三方软件。
dzz028 2010-02-07
  • 打赏
  • 举报
回复
貌似源码中红字无效。。。。
补上:出错在这句代码:
sck.Bind(New IPEndPoint(Dns.GetHostEntry(Dns.GetHostName).AddressList(0), 0))
sck.IOControl(SIO_RCVALL, DataIN, DataOUT)
dzz028 2010-02-07
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 wzuomin 的回复:]
http://blog.csdn.net/wzuomin/archive/2007/06/14/1652558.aspx
[/Quote]

这个我正在尝试...不过也有遇到不懂的,正好问问:

'构造函数
Sub New()
ReDim buffer(mVarBufferLength)

'建立原始套结字
sck = New Socket(AddressFamily.InterNetwork, SocketType.Raw, ProtocolType.IP)
sck.Blocking = False '是否处于阻塞模式
sck.Bind(New IPEndPoint(Dns.GetHostEntry(Dns.GetHostName).AddressList(0), 0))

If Not SetSockoption() Then Throw New Exception("Error! Unable to setup socket options")
End Sub

'设置网卡工作在混合模式,以便可以截获所有流经网卡的数据包
Private Function SetSockoption()As Boolean
Try
sck.SetSocketOption(SocketOptionLevel.IP, SocketOptionName.HeaderIncluded, 1)
Dim DataIN() As Byte = {1, 0, 0, 0}
Dim DataOUT(4) As Byte
Dim SIO_RCVALL As Integer = &H98000001

sck.IOControl(SIO_RCVALL, DataIN, DataOUT)
If (BitConverter.ToInt32(DataOUT, 0) <> 0) Then Return False Else Return True
Catch ex As SocketException
MsgBox(ex.Message, MsgBoxStyle.Critical, "设置网卡工作模式")
Return False
End Try
End Function


这2端代码,到了红字部分,就会出错。



    '接收数据包
Private Sub subReceive()
Dim i As Integer, ar As IAsyncResult
Dim b As Byte()

While ContinueReceive
ar = sck.BeginReceive(buffer, 0, buffer.Length, SocketFlags.None, Nothing, Me)
i = sck.EndReceive(ar)

ReDim b(i - 1)
Array.Copy(buffer, 0, b, 0, i)
RaiseEvent DataReceived(b, i)

System.Threading.Thread.Sleep(10)
End While
End Sub


这段代码,他不懂他得到的数据怎么显示出来的,。我又应该怎么用。
求高人指点
wuyq11 2010-02-07
  • 打赏
  • 举报
回复
httpwatch
dzz028 2010-02-07
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 half_bucket 的回复:]
socket端口只要侦听到就可以获取到binary的内容,这个方法应该最简单。
[/Quote]

问题在于我不知道他使用了哪个端口。
half_bucket 2010-02-07
  • 打赏
  • 举报
回复
socket端口只要侦听到就可以获取到binary的内容,这个方法应该最简单。
ddodok 2010-02-07
  • 打赏
  • 举报
回复
帮up

16,555

社区成员

发帖
与我相关
我的任务
社区描述
VB技术相关讨论,主要为经典vb,即VB6.0
社区管理员
  • VB.NET
  • 水哥阿乐
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧