Find Jobs
Hire Freelancers

program to establish SSH connection and open IE

$30-5000 USD

Închis
Data postării: peste 12 ani în urmă

$30-5000 USD

Plata la predare
I need a Windows program that, when the user clicks a button, will automatically establish an SSH connection to a specified remote server, forward a TCP/IP port over that connection, and then launch IE with IE's proxy settings set to use that connection. The proof-of-concept already exists (I have the remote server already set up, and in the detailed requirements section, I describe how you can use an existing ssh client to connect to the server, enable the port forward, and use IE to surf the Web through that connection). More information listed in the detailed requirements section (for example, the program should take a snapshot of IE's existing proxy settings before changing them, so the program can put back IE's proxy settings when it's done). The program is similar in nature to existing programs like UltraSurf (from [[login to view URL]][1]) and Puff (from [[login to view URL]][2]). ## Deliverables I have a server which is set up with an http proxy server listening locally on port 4219. So that if you SSH to the server at [login to view URL] port 443 (NOTE: port 443, not the default SSH port 22), using the username proxuser and password proxpass, and you configure your SSH client to do a client-to-server port forward, listening on [login to view URL] port 4219 and forwarding to [login to view URL] port 4219, and then configure your web browser to use localhost 4219 as an http proxy, you can surf the Web through a tunneled connection to our proxy server. For example, using the SSH client Bitvise Tunnelier, I set up a client-to-server forward in the connection options: [[login to view URL] ][3](Note that of course the "[login to view URL]" in the "listen interface" refers to my local machine, while the "[login to view URL]" in the "destination host" refers to the remote machine. So this means: while the ssh connection is established, take an incoming connection on port 4219, and forward it over the ssh connection to port 4219 on the *remote* machine -- where it will connect with the HTTP proxy.) So what I want to do is create a simple client program so that when the user clicks a single button, the program establishes an SSH connection to our server with the port forwarding enabled over that connection, configures their IE browser to use localhost 4219 as a proxy, and launches IE on the page <[login to view URL]> . This will enable users to access blocked sites (like Facebook and Youtube) in censored countries like Iran and China, without requiring the user to know how about setting up ssh connections, port forwarding, etc. The program should be compilable as a solution in Microsoft Visual Studio 2010 since that's what I have, and I'll need to see the code and compile it myself. (Presumably this means it can be written in an earlier version of Visual Studio, as long as it compiles in VS2010.) This might be negotiable if you're offering a very good bid and you prefer to work in some other environment. Now, in the following description of the program, all of the text (including button captions, text field captions, text field *default values*, and error dialog messages, etc.), as well as the logo in the main dialog box, should be stored as "resources", rather than being hard-coded into the program -- so that they can be edited by editing them in a resource editor, without having to re-compile the program. Also, the default values that are filled in on the "Settings" tab, should be editable as resources. One reason is that the program is going to be customized for different languages, and I want to be able to customize it by editing the resources, and not having to re-compile it every time. However, the one thing that I don't want to have "editable" as a resource, is the landing page that the browser opens on ( <[login to view URL]> ). This is because I don't want crackers making pirate versions of the program and changing the landing page to a page loaded with their own advertisements or something similar. I realize that a sufficiently skilled reverse engineer would be able to modify the program to do this anyway, but I'd like to make it at least somewhat hard. I'm going to want the landing page URL to be hard-coded into the source code somewhere in a *scrambled* format, and then unscrambled at run time -- this is covered later in the specifications below.) Here's what I want the program to look like: A dialog box with two tabs, a "Main" tab and a "Settings" tab. On the "Main" tab, you have our [login to view URL] logo on the left: [[login to view URL] ][4]and on the right, two buttons, "Launch" and "Exit": [[login to view URL] ][5](Of course, you don't have to use those fonts or anything; it should look like a real Windows program, and not my crummy drawing in MS Paint :) ) On the "Settings" tab there should be the following text fields with the following default values: - the server that the client establishes the SSH connection to (one field for hostname or IP address, one field for port number). Default value: [[login to view URL] ][6]- the username and password that the client uses to connect Default values: username: proxuser password: proxpass - a local port number, a remote host, and remote port number to use for port forwarding. Default values: - local port number: 4219 - remote host: [login to view URL] - remote port number: 4219 - the md5 hash of the host key Default value: 258f4c78cf93782010e0845c761a9c94 (this is the md5 hash of the host key that gets served if you connect via ssh to [login to view URL]) The functionality is straightforward: When the user launches the program and clicks the "Launch" button, the program should open an SSH connection using the server name, port number, username, and password specified in "Settings". (If any errors are encountered, handle them gracefully -- see below in the "test cases" section.) If connection is established successfully, then open the port-forward using the local port number, remote host and remote port number specified in "settings". Now before opening IE, the program should exactly save IE's proxy settings, which means saving all of the following: - the value of the "Automatically detect settings" checkbox - the value of the "Use automatic configuration script" checkbox - the URL of the automatic configuration script, if any - the value of the "Use a proxy server for your LAN" checkbox - the address and port number for the LAN proxy, if any - under "Advanced" proxy settings, the value of the checkbox for "Use the same proxy server for all protocols", and the values for "http", "secure", "ftp", and "socks" proxy servers (The reason for saving these settings is so that after the user exits the program, IE's proxy settings can be restored to exactly what they were before.) Incidentally this KB article <[login to view URL]> describes the API for reading/writing IE's proxy settings. After saving IE's proxy settings, the program should set IE to use localhost as a proxy, using the port number specified in the "Settings" dialog (by default, 4219). Then, open Internet Explorer on the landing page: [[login to view URL] ][7]Now, the URL that the browser opens on, <[login to view URL]> , should be stored somewhere in the source code in some sort of obscured format which is unscrambled on the fly at run time, so that the user can't find the URL just by editing the program's resources, or by opening it in a hex editor and searching for text. The "encoded" version of the URL should not be just ASCII text either, since that's too easy to find (for example, don't store it in base64 and then decode the base64 on the fly, because a cracker would probably find the base64 if they searched the exe for all text strings). I assume the easiest option would be something like specifying the URL in gzipped binary format somewhere in the source code, and then gunzipping that string at run time to get the URL. But it's up to you how you want to do that. (Of course, I need to know how to *encode* the URL using whatever scheme you prefer, so that I can edit the encoded version in the source code. That's covered in the test cases below.) Here are the test cases that I'm going to run when I get the software, so please verify these test cases yourself first: - Basic functionality: Run the program, click the "Launch" button to open IE, verify that IE opens on the page <[login to view URL]> , verify that IE is set to use localhost as a proxy, and verify that I can browse websites through IE. - Verify that "automatically detect settings" checkbox is restored on exit: In IE's proxy settings options, start with "automatically detect settings" checkbox checked. Run the program, click "Launch" button to open IE. Go into IE's proxy settings and verify that "automatically detect settings" checkbox is no longer checked, and IE is set to use localhost as proxy. Click Exit button to close program. Open IE's proxy settings again and verify that the "automatically detect settings" checkbox is checked again. - Verify that "use automatic configuration script" is restored on exit: In IE's proxy settings options, start with "use automatic configuration script" checked, and some proxy script url entered (it doesn't have to be a valid configuration script since it won't be used). Run the program, click "Launch" button to open IE. Go into IE's proxy settings and verify that "use automatic configuration script" is no longer checked, and that IE is set to use localhost as a proxy. Click Exit button to close program. Open IE's proxy settings again and verify that "use automatic configuration script" is checked again, and that the automatic configuration script url is still there. - Verify that manual proxy settings are restored on exit, when using same proxy for all protocols: in IE's proxy settings options, start with "use a proxy server for your LAN" checkbox checked, and enter some dummy value for the proxy hostname and port number (these will not be used). Under "Advanced" proxy settings, make sure "use the same proxy server for all protocols" is checked (this is the default). Run the program, click the "Launch" button to open IE. Go into IE's proxy settings and verify that "use a proxy server for your LAN" is still checked, but that the hostname and portnumber have been replaced with localhost port 4219. Click Exit button to close program. Open IE's proxy settings again and verify that "use a proxy server for your LAN" is still checked, but that the old dummy hostname and port number have been put back. - Verify that manual proxy settings are restored on exit, when using different proxy for different protocols: in IE's proxy settings options, have the "use a proxy server for your LAN" checkbox checked. Click Advanced, and un the Advanced options un-check the box for "use the same proxy server for all protocols". Enter dummy hostname and port number values for "HTTP:", "Secure:", "FTP:" and "Socks:" (these won't actually be used). Run the program, click the "Launch" button to open IE. Go into IE's proxy settings and verify that "use a proxy server for your LAN" is still checked, but that the hostname and portnumber have been replaced with localhost port 4219, and that if you click the Advanced button, the box for "use the same proxy server for all protocols" is checked. Click Exit button to close program. Open IE's proxy settings again and verify that "use a proxy server for your LAN" is still checked, and that if you click the "Advanced" button, the "use the same proxy server for all protocols" checkbox is UN-checked again, and that the dummy hostnames and port numbers are there. - Verify that program checks md5 checksum of host key: In program, go to the "settings" tab and change one digit of the md5 checksum. Go back to main tab and click "Launch" button. Verify you get the error message "The md5 checksum of this host key is incorrect. Connection cannot be established." and that IE does not open. (Also, IE proxy settings should not be changed in this case.) - Verify that program does not check md5 checksum of host key when this option is un-checked: In program, go to "settings" tab and change one digit of the md5 checksum. UN-check the box for "Verify md5 checksum of host key". Go back to main tab and click "Launch". Verify that connection is established and IE opens successfully (even though md5 checksum was wrong). - Verify that program gives graceful error message if username/password is wrong: In program, go to "settings" tab and change a character of the username or password. Go back to main tab and click "Launch". Verify that you get the error message "The username and/or password for this login is incorrect. Connection cannot be established." and IE does not open. (Also, IE proxy settings should not be changed in this case.) - Verify that program gives graceful error message if a network error occurs: In program, go to "settings" tab and change the port number to something other than port 443. Switch back to tab and click "Launch". Verify that you get an error message like: "Connection failed with error: <error goes here>". (I'm assuming that the operating system provides a plain-English error code like "Connection timed out" or "Connection refused", and you can insert that error message into the dialog box.) (Also, IE proxy settings should not be changed in this case.) - Verify that I can edit the default username, password, hostname, port number, and md5 hash of the program, without having to recompile the program. Change these values (using a resource editor or whatever utility you recommend), verify that the program still launches successfully, and that the hostname/port etc. are all populated with the changed values. - Verify that I can edit the landing page ( <[login to view URL]> ) by opening the project in Visual Studio and editing wherever the "encoded" URL is stored. Obviously in order to insert a new "encoded" value, I'm also going to have to have a procedure for converting the new URL into its encoded value. So for example if the string storing the URL is gzipped, then I'd just need to know how to take a new URL like <[login to view URL]> , and convert that into the binary format that's stored in the source code. (And then, of course, I'll run the program and verify that IE opens on the new URL like [login to view URL] .) Thanks! Feel free to send comments or questions as part of the bidding process and I look forward to working with you!
ID-ul proiectului: 3623914

Despre proiect

4 propuneri
Proiect la distanță
Activ: 13 ani în urmă

Vrei să câștigi bani?

Avantajele de a licita pe platforma Freelancer

Stabilește bugetul și intervalul temporal
Îți primești plata pentru serviciile prestate
Evidențiază-ți propunerea
Te înregistrezi și licitezi gratuit pentru proiecte
4 freelanceri plasează o ofertă medie de $788 USD pentru proiect
Avatarul utilizatorului
See private message.
$250 USD în 14 zile
5,0 (6 recenzii)
3,8
3,8
Avatarul utilizatorului
See private message.
$150 USD în 14 zile
5,0 (14 recenzii)
3,5
3,5
Avatarul utilizatorului
See private message.
$2.500,70 USD în 14 zile
0,0 (0 recenzii)
0,0
0,0
Avatarul utilizatorului
See private message.
$250,75 USD în 14 zile
0,0 (0 recenzii)
0,0
0,0

Despre client

Steagul UNITED STATES
Bellevue, United States
5,0
128
Metoda de plată a fost confirmată
Membru din oct. 24, 2004

Verificarea clientului

Mulțumim! Ți-am trimis prin e-mail linkul pe care trebuie să-l accesezi pentru a revendica creditul gratuit.
A apărut o eroare la trimiterea e-mailului. Încearcă din nou.
Utilizatori înregistrați Totalul proiectelor postate
Freelancer ® is a registered Trademark of Freelancer Technology Pty Limited (ACN 142 189 759)
Copyright © 2024 Freelancer Technology Pty Limited (ACN 142 189 759)
Se încarcă previzualizarea
S-a oferit permisiunea de depistare a locației.
Ți-a expirat sesiunea pentru conectare sau te-ai deconectat. Conectează-te din nou.