有些公司的局域网环境,例如我们公司的只允许使用代理上网,图形界面的很好解决就设置一下浏览器的代理就好了,但是linux纯命令行的界面就....下面简单几步就可以实现了!

一、命令行界面的一般代理设置方法
1、在profile文件中设置相关环境变量
# vi /etc/profile

http_proxy=192.168.10.91:3128 # 分别指定http、https、ftp协议使用的代理服务器地址
https_proxy=192.168.10.91:3128
ftp_proxy=192.168.10.91:3128
no_proxy=192.168.10.0. # 访问局域网地址(192.168.20.0/24网段)时不使用代理,可以用逗号分隔多个地址
export http_proxy https_proxy ftp_proxy no_proxy

保存退出,注销重新登陆系统即可生效

现在代理上网时没有问题了,如果使用的是debian的系统要使用apt-get怎么办?

三种方法:

1.临时设置让 apt-get 使用代理

直接在命令行下输入 export http_proxy=http://yourproxyaddress:proxyport

2.永久设置

编辑/etc/apt/apt.conf文件,在文件末尾加入

Acquire::http::Proxy "http://yourproxyaddress:proxyport

有的系统安装时没有apt.conf文件需要手动建立,此方法仅是给apt-get设置代理

3.为apt和其他应用程序,如wget设置代理

编辑.bashrc文件,在文件末尾添加

http_proxy=http://yourproxyaddress:proxyport

export http_proxy保存文件,退出重新登录设置生效。

http://www.cnblogs.com/AloneSword/p/3394806.html

Command Line JVM Settings

The proxy settings are given to the JVM via command line arguments:

 java -Dhttp.proxyHost=proxyhostURL
-Dhttp.proxyPort=proxyPortNumber
-Dhttp.proxyUser=someUserName
-Dhttp.proxyPassword=somePassword HelloWorldClass

Setting System Properties in Code

Add the following lines in your Java code so that JVM uses the proxy to make HTTP calls. This would, of course, require you to recompile your Java source. (The other methods do not require any recompilation):

System.getProperties().put("http.proxyPort", "someProxyPort");
System.getProperties().put("http.proxyUser", "someUserName");
System.getProperties().put("http.proxyPassword", "somePassword");
System.getProperties().put("http.proxyHost", "someProxyURL");

One more configuraiton for Microsoft ISA NTLM Authentication

You need add below in addition is the proxy using NTLM authentication.
-Dhttp.auth.ntlm.domain=DOMAIN

Configuring Authentication Order

There are three authentication mechanisms provided - ntlmdigest & basic in that order by default. It is possible to change the order and also not exclude one or more methods altogether. This can be done with the following property.

-Dhttp.proxyAuth=basic,ntlm

In this example the authentication order will be basic and then ntlm only - digest will not be used.

Since Java 1.5 you can also pass a java.net.Proxy instance to the openConnection() method

//Proxy instance, proxy ip = 123.0.0.1 with port 8080
Proxy proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress("123.0.0.1", 8080));
URL url = new URL("http://www.yahoo.com");
HttpURLConnection uc = (HttpURLConnection)url.openConnection(proxy);
uc.connect();String page;
StringBuffer tmp = new StringBuffer();
BufferedReader in = new BufferedReader(new InputStreamReader(uc.getInputStream()));
while ((line = in.readLine()) != null){page.append(line + "\n");
}
System.out.println(page);

so you don't need to set system properties. You can use the default PROXY as defined by your networking settings.

System.setProperty("java.net.useSystemProxies", "true");
List l = null;
try {l = ProxySelector.getDefault().select(new URI("http://www.yahoo.com"));
}
catch (URISyntaxException e) {e.printStackTrace();
}if (l != null) {for (Iterator iter = l.iterator(); iter.hasNext() {java.net.Proxy proxy = (java.net.Proxy) iter.next();System.out.println("proxy hostname : " + proxy.type());InetSocketAddress addr = (InetSocketAddress) proxy.address();if (addr == null) {System.out.println("No Proxy");} else {System.out.println("proxy hostname : " + addr.getHostName());System.out.println("proxy port : " + addr.getPort());}}
}

To bypass the PROXY,

URL url = new URL("http://internal.server.local/");
URLConnection conn = url.openConnection(Proxy.NO_PROXY);

Proxy and Username/Password

You might need to identify yourself to the proxy server.

One way is to use the HTTP property "Proxy-Authorization" with a username:password base64 encoded.

System.setProperty("http.proxyHost", "myProxyServer.com");
System.setProperty("http.proxyPort", "80");
URL url=new URL("http://someserver/somepage");
URLConnection uc = url.openConnection ();
String encoded = new String(Base64.base64Encode(new String("username:password").getBytes()));
uc.setRequestProperty("Proxy-Authorization", "Basic " + encoded);
uc.connect();

The following example dumps the content of a URL but before we identify ourself to the proxy.
import java.net.*;
import java.io.*;public class URLUtils {public static void main(String s[]) {URLUtils.dump("http://www.yahoo.com");System.out.println("**************");URLUtils.dump("https://www.paypal.com");System.out.println("**************");}public static void dump(String URLName){try {DataInputStream di = null;FileOutputStream fo = null;byte [] b = new byte[1];// PROXYSystem.setProperty("http.proxyHost","proxy.mydomain.local") ;System.setProperty("http.proxyPort", "80") ;URL u = new URL(URLName);HttpURLConnection con = (HttpURLConnection) u.openConnection();//// it's not the greatest idea to use a sun.misc.* class// Sun strongly advises not to use them since they can// change or go away in a future release so beware.//
      sun.misc.BASE64Encoder encoder = new sun.misc.BASE64Encoder();String encodedUserPwd =encoder.encode("mydomain\\MYUSER:MYPASSWORD".getBytes());con.setRequestProperty("Proxy-Authorization", "Basic " + encodedUserPwd);// PROXY ----------
di = new DataInputStream(con.getInputStream());while(-1 != di.read(b,0,1)) {System.out.print(new String(b));}}catch (Exception e) {e.printStackTrace();}}
}

With JDK1.2, the java.net.Authenticator can be used to send the credentials when needed.
public static void dump(String URLName){try {DataInputStream di = null;FileOutputStream fo = null;byte [] b = new byte[1];// PROXYSystem.setProperty("http.proxyHost","proxy.mydomain.local") ;System.setProperty("http.proxyPort", "80") ;Authenticator.setDefault(new Authenticator() {protected PasswordAuthentication getPasswordAuthentication() {return newPasswordAuthentication("mydomain\\username","password".toCharArray());}});URL u = new URL(URLName);HttpURLConnection con = (HttpURLConnection) u.openConnection();di = new DataInputStream(con.getInputStream());while(-1 != di.read(b,0,1)) {System.out.print(new String(b));}}catch (Exception e) {e.printStackTrace();}
}

Bypass a Proxy

In intranet environment, you may need to bypass the proxy server and go directly to the http server.

The http.nonProxyHosts property indicates the hosts which should be connected too directly and not through the proxy server. The value can be a list of hosts, each seperated by a |, and in addition a wildcard character (*) can be used for matching.

java.exe  -Dhttp.nonProxyHosts="*.mycompany.com|*.mycompany.local|localhost" MyClass

 

Below are  the Networking Properties from http://docs.oracle.com/javase/7/docs/api/java/net/doc-files/net-properties.html

There are a few standard system properties used to alter the mechanisms and behavior of the various classes of the java.net package. 
Some are checked only once at startup of the VM, and therefore are best set using the -D option of the java command, 
while others have a more dynamic nature and can also be changed using the System.setProperty() API. 
The purpose of this document is to list and detail all of these properties.
If there is no special note, a property value is checked every time it is used.

  • IPv4 / IPv6

java.net.preferIPv4Stack (default: false)
If IPv6 is available on the operating system the underlying native socket will be, by default,
an IPv6 socket which lets applications connect to, and accept connections from, both IPv4 and IPv6 hosts.
However, in the case an application would rather use IPv4 only sockets, then this property can be set to true. 
The implication is that it will not be possible for the application to communicate with IPv6 only hosts.

java.net.preferIPv6Addresses (default: false)
When dealing with a host which has both IPv4 and IPv6 addresses, and if IPv6 is available on the operating system, 
the default behavior is to prefer using IPv4 addresses over IPv6 ones. This is to ensure backward compatibility, 
for example applications that depend on the representation of an IPv4 address (e.g. 192.168.1.1). 
This property can be set to true to change that preference and use IPv6 addresses over IPv4 ones where possible.

Both of these properties are checked only once, at startup.

  • Proxies

A proxy server allows indirect connection to network services and is used mainly for security (to get through firewalls) 
and performance reasons (proxies often do provide caching mechanisms). 
The following properties allow for configuration of the various type of proxies.

  • HTTP

The following proxy settings are used by the HTTP protocol handler.

http.proxyHost (default: <none>) The hostname, or address, of the proxy server

http.proxyPort (default: 80) The port number of the proxy server.

http.nonProxyHosts (default: localhost|127.*|[::1])

Indicates the hosts that should be accessed without going through the proxy. Typically this defines internal hosts. 
The value of this property is a list of hosts, separated by the '|' character. 
In addition the wildcard character '*' can be used for pattern matching.

For example -Dhttp.nonProxyHosts=”*.foo.com|localhost” will indicate that every hosts in the foo.com domain 
and the localhost should be accessed directly even if a proxy server is specified.

The default value excludes all common variations of the loopback address.

  • HTTPS

This is HTTP over SSL, a secure version of HTTP mainly used when confidentiality (like on payment sites) is needed.

The following proxy settings are used by the HTTPS protocol handler.

https.proxyHost(default: <none>)
The hostname, or address, of the proxy server

https.proxyPort (default: 443)
The port number of the proxy server.

The HTTPS protocol handler will use the same nonProxyHosts property as the HTTP protocol.

  • FTP

The following proxy settings are used by the FTP protocol handler.

ftp.proxyHost(default: <none>)
The hostname, or address, of the proxy server

ftp.proxyPort (default: 80)
The port number of the proxy server.

ftp.nonProxyHosts (default: localhost|127.*|[::1])
Indicates the hosts that should be accessed without going through the proxy. Typically this defines internal hosts.
The value of this property is a list of hosts, separated by the '|' character. In addition the wildcard character '*' can be 
used for pattern matching.

For example -Dftp.nonProxyHosts=”*.foo.com|localhost” will indicate that every hosts in the foo.com 
domain and the localhost should be accessed directly even if a proxy server is specified.

The default value excludes all common variations of the loopback address.

  • SOCKS

This is another type of proxy. It allows for lower level type of tunneling since it works at the TCP level. 
In effect, in the Java(tm) platform setting a SOCKS proxy server will result in all TCP connections to go through that proxy, 
unless other proxies are specified. If SOCKS is supported by a Java SE implementation, the following properties will be used:

socksProxyHost (default: <none>)
The hostname, or address, of the proxy server.

socksProxyPort (default: 1080)
The port number of the proxy server.

socksProxyVersion (default: 5)
The version of the SOCKS protocol supported by the server. The default is 5 indicating SOCKS V5, alternatively 4 can be specified for SOCKS V4. 
Setting the property to values other than these leads to unspecified behavior.

java.net.socks.username (default: <none>)
Username to use if the SOCKSv5 server asks for authentication and no java.net.Authenticator instance was found.

java.net.socks.password (default: <none>)
Password to use if the SOCKSv5 server asks for authentication and no java.net.Authenticator instance was found.

Note that if no authentication is provided with either the above properties or an Authenticator, and the proxy requires one,
then the user.name property will be used with no password.

java.net.useSystemProxies (default: false)
On recent Windows systems and on Gnome 2.x systems it is possible to tell the java.net stack, setting this property to true,
to use the system proxy settings (both these systems let you set proxies globally through their user interface). 
Note that this property is checked only once at startup.

  • Misc HTTP properties

http.agent (default: “Java/<version>”)
Defines the string sent in the User-Agent request header in http requests. Note that the string “Java/<version>” will be appended 
to the one provided in the property (e.g. if -Dhttp.agent=”foobar” is used, the User-Agent header will contain “foobar Java/1.5.0” 
if the version of the VM is 1.5.0). This property is checked only once at startup.

http.keepalive (default: true)
Indicates if persistent connections should be supported. They improve performance by allowing the underlying socket 
connection to be reused for multiple http requests. If this is set to true then persistent connections will be requested with HTTP 1.1 servers.

http.maxConnections (default: 5)
If HTTP keepalive is enabled (see above) this value determines the maximum number of idle connections that will be simultaneously kept alive,
per destination.

http.maxRedirects (default: 20)
This integer value determines the maximum number, for a given request, of HTTP redirects that will be automatically followed by the protocol handler.

http.auth.digest.validateServer (default: false)

http.auth.digest.validateProxy (default: false)

http.auth.digest.cnonceRepeat (default: 5)

These 3 properties modify the behavior of the HTTP digest authentication mechanism. Digest authentication 
provides a limited ability for the server to authenticate itself to the client (i.e. By proving it knows the user's password).

However not all HTTP servers support this capability and by default it is turned off.
The first two properties can be set to true to enforce this check for authentication with either an origin or proxy server, respectively.

It is usually not necessary to change the third property. It determines how many times a cnonce value is re-used. 
This can be useful when the MD5-sess algorithm is being used. Increasing this value reduces the computational overhead 
on both client and server by reducing the amount of material that has to be hashed for each HTTP request.

http.auth.ntlm.domain (default: <none>)
NTLM is another authentication scheme. It uses the java.net.Authenticator class to acquire usernames and passwords 
when they are needed. However NTLM also needs the NT domain name. There are 3 options for specifying that domain:

Do not specify it. In some environments the domain is actually not required and the application does not have to specify it.

The domain name can be encoded within the username by prefixing the domain name, followed by a back-slash '\' before the username. 
With this method existing applications that use the authenticator class do not need to be modified, 
as long as users are made aware that this notation must be used.

If a domain name is not specified as in method 2) and these property is defined, then its value will be used a the domain name.
All these properties are checked only once at startup.

  • Address Cache

The java.net package, when doing name resolution, uses an address cache for both security and performance reasons. 
Any address resolution attempt, be it forward (name to IP address) or reverse (IP address to name), 
will have its result cached, whether it was successful or not, so that subsequent identical requests will not have to access the naming service.
These properties allow for some tuning on how the cache is operating.

networkaddress.cache.ttl (default: see below)

Value is an integer corresponding to the number of seconds successful name lookups will be kept in the cache. A value of -1, 
or any other negative value for that matter, indicates a “cache forever” policy, while a value of 0 (zero) means no caching. 
The default value is -1 (forever) if a security manager is installed, and implementation specific when no security manager is installed.

networkaddress.cache.negative.ttl (default: 10)

Value is an integer corresponding to the number of seconds an unsuccessful name lookup will be kept in the cache. A value of -1,
or any negative value, means “cache forever”, while a value of 0 (zero) means no caching.

Since these 2 properties are part of the security policy, they are not set by either the -D option or the System.setProperty() API,
instead they are set in the JRE security policy file lib/security/java.security.

http://docs.oracle.com/javase/6/docs/technotes/guides/net/properties.html

http://www.cnblogs.com/princessd8251/p/3819327.html

demo:

HTTP_PROXY="baidu.com:1234"http_proxy=$HTTP_PROXY
https_proxy=$HTTP_PROXY
ftp_proxy=$HTTP_PROXY
no_proxy=$HTTP_PROXYexport http_proxy https_proxy ftp_proxy no_proxyexport JAVA_OPTS="-Dhttp.proxySet=true -Dhttp.proxyHost=10.163.214.196 -Dhttp.proxyPort=3128 -Dhttp.nonProxyHosts=<domain_one>|<domain_two> $JAVA_OPTS"


Getting HTTP Connections to Use Proxy

In android, programmatic access to HTTP resources typically uses the HttpURLConnection class. You can tell it to use a proxy by setting some system properties:

System.setProperty("http.proxyHost", host);
System.setProperty("http.proxyPort", port); System.setProperty("https.proxyHost", host); System.setProperty("https.proxyPort", port);

You can disable proxying by clearing those properties:

System.clearProperty("http.proxyHost");
System.clearProperty("http.proxyPort"); System.clearProperty("https.proxyHost"); System.clearProperty("https.proxyPort");

However, there is one big caveat - HttpURLConnection uses keep-alives to reuse existing TCP connections. These TCP connections will still be using the old proxy settings. This has several implications:

Set the proxy settings as early in the application's lifecycle as possible, ideally before any HttpURLConnections have been opened.

Don't expect the settings to take effect immediately if some HttpURLConnections have already been opened.

Disable keep-alives if you need to, which you can do like this:

HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
// Need to force closing so that old connections (with old proxy settings) don't get reused. urlConnection.setRequestProperty("Connection", "close");

https://github.com/getlantern/lantern

linux命令行模式下实现代理上网 专题相关推荐

  1. Linux 命令行模式下退出 vim

    Linux 命令行模式下退出 vim 命令 说明 :q! 强制退出,不保存 :q 退出 :wq! 强制保存并退出 :w <文件路径> 另存为 :saveas 文件路径 另存为 :x 保存并 ...

  2. linux 命令行模式下,浏览网页方法

    Ubuntu自带最新版的Gnome桌面,拥有大量的服务和桌面应用程序,让您仅通过一张安装光盘就可以体验到无比舒适的操作环境.下文介绍的在ubuntu下使用终端命令行上网的方法. 第一步,需要安装一个名 ...

  3. Linux命令行模式下的复制和粘贴以及停止命令刷新

    安装gpm:yum install -y gpm* 开启gpm服务:systemctl start gpm 按住鼠标左键,选中想要复制的内容,松开就完成复制,再在复制的位置按右键就完成粘贴. 现象:打 ...

  4. 命令行模式下几个网络命令详解

    命令行模式下几个网络命令详解 上一篇 / 下一篇  2007-05-16 16:20:55 查看( 166 ) / 评论( 0 ) / 评分( 0 / 0 ) 命令行模式下几个网络命令详解 一.pin ...

  5. linux命令行模式连接网络,centos命令行模式连接无线网络的过程

    1. 首先, 你的系统要能驱动无限网卡, 要是人品好的话, 系统已经自带了你的网卡的驱动程序. 不然就要先搞定无线网卡的驱动再说. 不然后面的步骤也就没必要了. 2. 看一下你的无线网卡叫什么: iw ...

  6. kali liunx使用心得之命令行模式下如何配置连接无线网络

    kali liunx使用心得之命令行模式下如何配置连接无线网络 最近在使用kali时出现了一点小小的问题,由于我安装的是win10和kali双系统,为了能够在kali界面下自由操作win10下的磁盘, ...

  7. 如何在Terminal命令行模式下运行Objective-C

    一般Objective-C的代码都在Xcode中调试,今天实验了下如何在命令行模式下运行,还是比较简单的,记录分享一下. File: xxd.h #include <Foundation/Fou ...

  8. [python] 命令行模式下出现cp65001异常

    问题 在命令行模式下有时会提示cp65001异常,很显然是命令行编码和python环境编码不匹配. 解决 切换命令行编码 unknown encoding: cp65001异常 python安装后进入 ...

  9. 命令行模式下获取参数的方法

    命令行模式下,$_SERVER['argv'] 的值为数组. 例如:D:\wamp\bin\php\php5.3.13>php D:\wamp\www\test\argv.php a1=123 ...

最新文章

  1. 【一次面试】再谈javascript中的继承
  2. github登陆方案
  3. python regex_Python 正则表达式
  4. RabbitMQ(五) 订阅发布者模式介绍以及代码实现
  5. 19.多个版本的Netcat概览
  6. 智能财务师 (544) -(喀麦隆)_智能财务管理师项目组到南京理工大学调研“智能会计”专业学科建设...
  7. python使用递归、尾递归、循环三种方式实现斐波那契数列
  8. 通达信手机版分时图指标大全_通达信七彩虹分时图指标,出现红色柱时候可以大胆买入...
  9. matlab 矩阵数据类型,Matlab数据类型
  10. Java小白成长之路之免安装版环境下载(1)
  11. 传智健康 第12章_PDF报表生成_JasperReports
  12. 【原创】为什么要用规则引擎?
  13. 企业面临的7大数据分析挑战
  14. 使用Netty实现一个小型服务器(作为数据中转站)
  15. Tomcat 2022-7-27
  16. Bia布刷题日记 LC-1
  17. PID file not written; -detached was passed,安装rabbitmq启动失败
  18. 数据治理建设管理方案(参考)(二)
  19. 互联网人一天24小时在做些啥《打工人的那些事》
  20. 不抛弃异常值的几种情况

热门文章

  1. [转]本地图片预览二三事
  2. Simplification of Articulated Meshes (EURO 09)
  3. 用PD进行数据库建模经验总结
  4. one-many和many-one的关系中的inverse的详解
  5. Mysql权限控制-允许用户远程链接
  6. 软件测试——网络协议知识(二)
  7. Jmeter基础之JMeter参数化补充练习
  8. 01-06 Linux常用命令-统计
  9. python开发程序员应该知道的面试技巧和注意事项
  10. 安装oracle的口令是,Oracle中口令设置、用户解锁、卸载等问题