开发者

Is is possile to Hook file-download event of a program?

Please tell me is it possile to know when a program is trying to download a file ( like in Internet Download Manager ). I want to catch that event (hook it), get the download url, and then destroy the event.

Thanks in advance..

@Jerry Coffin:Sr, I forgot to tell you that this feature of IDM is not active by default. It is only turned o开发者_如何学Cn when you enable the "Use advance browser integration" option at "Download/Options" of IDM menu. Like here :

http://files.myopera.com/UenX/files/Detect.jpg

+ Check the (1) options, OK, then reboot.

+ After reboot, the (2) option will appear, check it, OK, and now run your software. You should see some thing likes (3) ( this appear when I run the msgr9us.exe ( Yahoo! Messenger setup file) ) Give it a try..


For a specific program such as Internet Explorer, doing this is quite reasonable (IE includes hooks to invoke your code under the right circumstances). For most programs it's not possible though -- they simply don't generate any "event" for you to hook and "destroy".

To make a long story short, to get anywhere with this, you'll almost certainly need to handle the situation on a case-by-base basis, writing code specific to each application you want to deal with -- and know that any other application and even newer versions of the applications you've dealt with will probably break what you're trying to do.


Not really. Consider how a browser typically downloads a file: it opens a TCP socket connection to a remote server, either on port 23 or 80, and using the FTP protocol or HTTP protocol on that connection. These things you can detect, intercept and modify with high reliability. But there are other programs that use other mthods. for instance, P2P filesharing programs such as BitTorrent do not use HTTP or FTP, nor do they download a file from a single server.

So, while you don't need to understand every program, you must be able to detect and understand every file download protocol instead.


you could hook the network stream and filter for http download requests.


you'll need some library to capture network traffic (e.g. http://en.wikipedia.org/wiki/Pcap). Then you'll have to parse the network packets for the appropriate HTTP messages (sorry, I can't give them to you, I don't know them). I don't know if you can actually prevent packets from being sent though.


Another (easier) way would be to implement a proxy server (or modify an existing one) to do what you want. Then you just have to connect the IE to your proxy using the proxy server settings. Check for example Privoxy, which already does some kind of filtering.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜