Anonymous proxy with java

What is Java Anonymous Proxy?

Java Anonymous Proxy or JAP is a technique that allows users to use the internet secretly. In more technical terms, this means that without revealing the IP address, one can use the internet in an anonymous condition. There are a series of routers through which traffic is routed, this is known as proxy servers or also known as mix cascades. This mix cascade is governed by a different organization that is located in various countries. The data consisting of traffic is transferred to each server, and it gets encrypted and mixed with the data traffic of other users. Due to this process, it becomes very difficult and hard to identify the source of data traffic.

Java Anonymous Proxy has various features of Anti-Phishing, Anti-Malware Protection, and many more. This allows users to access these internet services in secret mode and also users to access blocked websites by bypassing internet censorship. Ultimately, JAP is the most significant technique for users to protect their online activity and also security.

Working of Java Anonymous Proxy

Working of Java Anonymous Proxy

Various components in Java Anonymous Proxy work together and provide anonymous browsing:

  1. Mix Proxy: Mix Proxy is the important component of Java Anonymous Proxy that receives requests from the user’s browser and sends the request to a chain of Mixes Proxy. Miz Proxy is the servers that are operated by the volunteers. Each Mix in the chain only knows the identity of the before and after Mix, but not the origin of the request or the final request destination. This is the actual point, which makes the user to be traced while doing internet activity,
  2. Info Service: The information about the Mixes in the chains has been provided by Info Service. Information about Bandwidth, Latency, and JAP also selects the most suitable Mixes for the user’s requests.
  3. Cache Proxy: The Cache Proxy is responsible for providing frequently accessed data, such as images and videos, this decreases the amount of information that needs to be transmitted through the Mix Chain. This improves the browsing latency and also decreases the load of Mixes.
  4. Internet: The Internet is the final endpoint of the user’s request. The chains of mixes that are core components forward the requests to the internet and receive the response from the internet, which is then sent to the user’s browser through the same chain of mixes.
Читайте также:  Css vertical center table cell

Encryption in Java Anonymous Proxy

Encryption is used by Java Anonymous Proxy (JAP) to protect the privacy and security of its users. Along with cryptographic algorithms like AES, DES, and RSA, Java has the support of the Java Cryptography Extension, which offers encryption, decryption, and key generation features. The asymmetric and symmetric encryption techniques are listed below.

  1. Asymmetric Encryption: To create a secure channel of communication between the user’s browser and the chains of the proxy, asymmetric encryption is used. When a user first connects to the Java Anonymous Proxy, the public-private key is generated first. The generated public key is transferred to the Mix Proxy, whereas the private key is been stored on the user’s PC. Mix Proxy uses the public key to encrypt its responses to the user’s request, which is only decrypted by the user’s private key.
  2. Symmetric Encryption: The user’s internet traffic is secured by JAP using symmetric encryption as it transmits through the Mix chains. Before the user’s request is sent on to the following Mix, each Mix in the chain generates a different and unique session key that is used to encrypt it. The request is decrypted and sent to the internet by the last Mix in the chain. The user’s browser receives the internet response through the Mix chain after being encrypted using the session key.

Benefits of Encryption

Using Encryption in communication has many benefits, below we have stated some of the benefits of Encryption, that are responsible for securing the data in communication.

  1. Confidentiality: Encryption guarantees that the data transferred in the communication is only assessed and read by the authorized person, by keeping the sensitive data private and protected from unauthorized access and users.
  2. Data Integrity: Encryption can be used to safeguard data against tampering or alteration, ensuring that it is kept in its original form and is reliable.
  3. Non-Repudiation: Using the Encryption technique, the identity of the sender and the identity of the receiver is been established.
  4. Compliance: To protect sensitive data, regulations, and industry standards frequently call for encryption, which can assist organizations in doing so.
  5. Enhanced security: Data stored on a device, in transit over a network, or in the cloud can all be secured using encryption.
Читайте также:  What is swagger java

Cons of Java Anonymous Proxy

As of now, we have seen the Java Anonymous Proxy technique in detail, but there are some of the drawbacks of this approach, which are discussed below:

  1. Performance: Application performance may be degraded by using an anonymous proxy server because it adds an extra hope to network communication.
  2. Limited Anonymity: Although anonymous proxy servers can hide the client’s IP address, they do not completely protect the client’s identity because it can still be discovered using other tools, like browser fingerprints.
  3. Limited Security: End-to-end encryption is not offered by anonymous proxy servers, so information passing through the proxy may still be susceptible to interception.
  4. Limited Access: A client’s ability to access specific content may be restricted by some websites that block traffic from anonymous proxy servers.
  5. Limited control: Since anonymous proxy servers are typically executed by outside parties, the client has less access control to ensure the privacy and security of data that transmits through the proxy.
  6. Limited Scalability: Anonymous proxy servers might be unable to handle a high client load, causing slowness or outages.
  7. Limited Troubleshooting: Problems with the client connection or the endpoint server may be difficult to troubleshoot and diagnose when using anonymous proxy servers.

Источник

Setting Up Proxy Connection to a System in Java

In today’s networking environments, categorically corporate ones, application developers have to deal with proxies virtually as often as system administrators. In some cases the application should utilize the system default settings, in other cases, it will be additive to have very tight control over what goes through which proxy, and, somewhere in the middle, most applications will be ecstatic to delegate the decision to their users by providing them with a GUI to set the proxy settings, as is the case in most browsers.

Proxy servers act as interfaces between client applications and other servers. In an enterprise setting, we often use them to help provide control over the content that users consume, usually across network boundaries.

We will figure out two ways by which we can connect across proxy servers in java which are as follows:

  1. Legacy approach that is JVM-wide and configured with system properties.
  2. Using Proxy class which provides more control by permitting configuration on the basis of each connection.

Method 1: Using a Global Setting

Java exhibits a set of system properties that can be used to set up the JVM-wide behavior. This “universal” approach is often the simplest to implement if it is appropriate for the use case. We can set the required properties from the command line during the invocation of the JVM. Alternatively, we can also define them using System.setProperty() at runtime. Here’s how to define them using the command line as shown below:

2.1. Set via Command Line Arguments

We can define proxies at the command line bypassing the parameters as system properties:

java -Dhttp.proxyHost=127.0.0.1 -Dhttp.proxyPort=8080 com.geeksforgeeks.networking.proxies.CommandLineProxyDemo

When starting a process that way, we can just use openConnection() on the URL with no extra work:

URL url = new URL(RESOURCE_URL);

URLConnection con = url.openConnection();

2.3 Set Proxy Using the System.setProperty() method

If there are problems when using the command line, there is another way to do this using the System.setProperty() method. To set up a proxy.

System.setProperty(“http.proxyHost”, “127.0.0.1”);

System.setProperty(“http.proxyPort”, “8080”);

URL url = new URL(RESOURCE_URL);

URLConnection con = url.openConnection();

// …

If we then manually disable the relevant system properties, then the proxy will not be used anymore:

Now with this there do comes limitations of global configuration which is as described further.

  • The global configuration approach is the easiest way to define the proxy, but there are certain limitations to this approach.
  • This approach provides the implementation on the JVM-wide, so the settings define for a particular protocol are active for the life of the JVM or until we unset them manually.

Note: To get over this limitation, it may be attractive to flip the settings on and off, if needed. But, it would be necessary to ensure the measures to protect against concurrency issues in a multi-threaded program.

So, as an alternative, the Proxy API is more efficient and provides more control over proxy configuration. As an alternative, the Proxy API provides more granular control over proxy configuration. This gives out birth to another approach that via Proxy API

Method 2: Using the Proxy API

The Proxy class gives us a flexible way to configure proxies on a per-connection basis. If there are any existing JVM-wide proxy settings, connection-based proxy settings using the Proxy class will override them. Here are three types of proxies that we can define by Proxy Type:

  1. HTTP is a proxy using the HTTP protocol
  2. SOCKS is a proxy using the SOCKS protocol
  3. DIRECT is an explicitly configured direct connection without a proxy

(A) Using an HTTP Proxy

To use an HTTP proxy, we first wrap a SocketAddress instance with a Proxy and type of Proxy.Type.HTTP. Next, we simply pass the Proxy instance to URLConnection.openConnection():

URL weburl = new URL(URL_STRING);

Proxy webProxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress(“127.0.0.1”, 8080));

HttpURLConnection webProxyConnection = (HttpURLConnection) weburl.openConnection(webProxy);

Now, we’ll connect to URL_STRING but then route that connection through a proxy server hosted at 127.0.0.1:8080.

(B) Using a DIRECT Proxy

We may have a requirement to connect directly to a host. In this case, we can explicitly bypass a proxy that may be configured globally by using the static Proxy.NO_PROXY instance. Under the covers, the API constructs a new instance of Proxy for us, using Proxy.Type.DIRECT as the type:

HttpURLConnection directConnection = (HttpURLConnection) weburl.openConnection(Proxy.NO_PROXY);

(C) Using a SOCKS Proxy

The Socks proxy works similarly to the HTTP variant while dealing with URLConnection. In Socks proxy, first, we wrap a SocketAddress instance with a Proxy using the Proxy.Type.SOCKS type. After that, the Proxy instance is passed to URLConnection.openConnection.

Proxy socksProxy = new Proxy(Proxy.Type.SOCKS, new InetSocketAddress(“127.0.0.1”, 1080));

HttpURLConnection socksConnection = (HttpURLConnection) weburl.openConnection(socksProxy);

It’s also possible to use a SOCKS proxy when connecting to a TCP socket. First, we use the Proxy instance to construct a Socket. Afterward, we pass the destination SocketAddress instance to Socket.connect() as follows:

Socket proxySocket = new Socket(socksProxy);

InetSocketAddress socketHost = new InetSocketAddress(SOCKET_SERVER_HOST, SOCKET_SERVER_PORT);

Источник

Оцените статью