i've actually just coded an intelligent firewall, however it was under linux so a tad different to coding a firewall under windows but a lot of the stuff i have done would probably port across to windows.
How familiar are you with TCP/IP networking? and how is your C?
What you are going to need to do is monitor outbound traffic. If it is going to one of the specified websites you will then want to modify the packet data so that the GETs are converted to POSTS.
You are going to need to capture and modify packets to do this, which requires a good knowledge of TCP/IP networking. When you catch a frame it is just a stream of bytes, you'll need to create structures in your C code to represents each of the packets within the frame. By using this you can access data in the packets and use it. What you are looking for lies in the IP and the TCP packets. From the IP packet you'll want to extract the destination IP address and see if it coresponds to one of these specified sites. If not just ignore it, otherwise you'll want to look in the TCP packet and ensure that it is infact on port 80 or contains a HTTP header. The HTTP header contains the GET method and it is this that needs modifying.
All that probably sounds a bit complex unless you have done it before, but there is a packet capture library called pcap, or for windows i believe it is winpcap. Now since all my coding was under linux you i could do pretty much anything i wanted but windows is probably more restrictive - even ethereal has limited abilities in capturing packets (mainly on wireless networks) just because of the way windows works. But definately take a look at winpcap.
There are still some problems:
1/ you'll need to modify packets, winpcap is for capturing them. I have never used it to modify packets so how effective it is i dont know, but it is functionality that you will require. If pcap doesnt do it then you'll need to find something that does. Windows wont let you modify the kernel.
2/ If you modify anything in the packet all checksums will need to be recalculated which'll mean a lot more work than you had first hoped.
Something that bothers me is whether what you actually want to achieve will work. In particular whether converting a GET to a POST will work. I know when i code php i specify something like:
Code:
$var = $_POST['postedVar'];
where var is set to the value of postedVar. Now if i used the query string
Code:
www.example.com/page.php?postedVar=value
$var would only be set if register globals is enabled (which now comes disabled with php by default), otherwise it will stay unset. The thing is you are working the other way, and i dont believe that variables are ever set using POSTs unless explicitly set. Ok you might be using the query string differently to the example, but before you go any further i'd code a few mock up pages to ensure that they accept GETs and POSTs interchangably - it may well be possble that they will accept both and presumably you plan to use this as a security feature.
This is actually quite a bit of work, but it's fun! I'ts the kind of thing i'm into (you might have guessed by the length of my post!!) so feel free to PM/email if you want any more info/code etc..., but i'd love to hear how things go with the proj since i've kept away from windows for most of my network related coding.
Edit: i just noticed that you wanted to use C#, or VB.Net or VB 6.0. Forget all of them. When coding for networks you'll be using C. Unless microsoft have given you some libraries to do so in C# which i doubt.