Linux的控制台颜色很好设置:Options ->Session Options -> Terminal -> Emulation 中Terminal选择ANSI or linux or xterm,必须钩上 ANSI Colour ---------------------------------------------------------
转一部分东西:
SecureCRT设置彩色和显示中文
设置Options->SessionOptions ->Emulation,然后把Terminal类型改成xterm,并点中ANSI Color复选框。
字体设置:Options->SessionOptions->Appearance->font然后改成你想要的字体就可以了。
注意:
1:字符集选择utf8,这样可以避免显示汉字乱码
2:选择字体的时候,需要选择ture type的字体(如新宋体),不然会出现汉字乱码
3:scrollback buffer 调大(5000),这样你就可以看到以前显示内容,这样方便很多
4:terminal要选择xtem,这样你ssh到服务器上才能显示颜色,并把ANSI Color打上勾
5:我选择的颜色方案Windows或Traditional。
用SecureCRT(Linux)来上传和下载数据
设置一下上传和下载的默认目录就行
options–>session options–>file transfer 下可以设置上传和下载的目录
剩下的你只要在用SecureCRT登陆linux终端的时候:
发送文件到windows客户端:sz file1 file2
zmodem接收可以自行启动.
从客户端上传文件到linux服务端:
只要服务端执行 : rz(rz -y)
然后在 SecureCRT 里选文件发送,协议 zmodem
简单吧,如果你以前一直使用ssh,而又没有对外开放ftp服务,你就直接使用这种方式来传输你的文件
SecureCRT的帮助中copy的:
ZModem is a full-duplex file transfer protocol that supports fast data transfer rates and effective error detection. ZModem is very user friendly, allowing either the sending or receiving party to initiate a file transfer. ZModem supports multiple file ("batch") transfers, and allows the use of wildcards when specifying filenames. ZModem also supports resuming most prior ZModem file transfer attempts.
rz,sz是便是Linux/Unix同Windows进行ZModem文件传输的命令行工具
PS:Linux上rz/sz这两个小工具安装lrzsz-x.x.xx.rpm即可,Unix可用源码自行 编译,Solaris spac的可以到sunfreeware下载执行码
在项目中调试Tonglink
Q传输时遇到由于网卡的MTU值大于路由器的最大值造成无法传输,经过调整服务器网卡的MTU值解决问题,以此为记,以下是百度百科搜索MTU的结果
通信术语最大传输单元(Maximum Transmission
Unit,MTU)是指一种通信协议的某一层上面所能通过的最大数据报大小(以字节为单位)。最大传输单元这个参数通常与通信接口有关(网络接口卡、串口等)。
因特网协议允许IP分片,这样就可以将数据报分成足够小的片段以通过那些最大传输单元小于该数据包原始大小的链路了。这一分片过程发生在传输层(OSI
模型的第四层,传输层:O S I
模型中最重要的一层。传输协议同时进行流量控制或是基于接收方可接收数据的快慢程度规定适当的发送速率。除此之外,传输层按照网络能处理的最大尺寸将较长的数据包进行强制分割。例如,以太网无法接收大于1
5 0 0
字节的数据包。发送方节点的传输层将数据分割成较小的数据片,同时对每一数据片安排一序列号,以便数据到达接收方节点的传输层时,能以正确的顺序重组。该过程即被称为排序。),它使用的是将分组发送到链路上的网络接口的最大传输单元的值。原始分组的分片都被加上了标记,这样目的主机的IP层就能将分组重组成原始的数据报了。
在因特网协议中,一条因特网传输路径的“路径最大传输单元”被定义为从源地址到目的地址所经过“路径”上的所有IP跳的最大传输单元的最小值。或者从另外一个角度来看,就是无需进一步分片就能穿过这条“路径”的传输单元的最大值。 RFC
1191描述了“路径最大传输单元发现方法”,这是一种确定两个IP主机之间路径最大传输单元的技术,其目的是为了避免IP分片。在这项技术中,源地址将数据报的DF(Don't
Fragment,不要分片)位置位,再逐渐增大发送的数据报的大小——路径上任何需要将分组进行分片的设备都会将这种数据报丢弃并返回一个“数据报过大”的ICMP响应到源地址——这样,源主机就“学习”到了不用进行分片就能通过这条路径的最大的最大传输单元了。 不幸的是,越来越多的网络封杀了ICMP的传输(譬如说为了防范DDOS攻击)——这使得路径最大传输单元发现方法不能正常工作,其常见表现就是一个连接在低数据流量的情况下可以正常工作,但一旦有大量数据同时发送,就会立即挂起(例如在使用IRC的时候,客户会发现在发送了一个禁止IP欺骗的ping之后就得不到任何响应了,这是因为该连接被大量的欢迎消息堵塞了)。而且,在一个使用因特网协议的网络中,从源地址到目的地址的“路径”常常会为了响应各种各样的事件(负载均衡、拥塞、断电等等)而被动态地修改——这可能导致路径最大传输单元在传输过程中发生改变——有时甚至是反复的改变。其结果是,在主机寻找新的可以安全工作的最大传输单元的同时,更多的分组被丢失掉了。 对于时下大多数使用以太网的局域网来说,最大传输单元的值是1500字节。但是像PPPoE这样的系统会减小这个数值,这就使得在使用最大传输单元发现方法时可能会产生这样的结果:一些处于配置不当的防火墙之后的站点变得不可达了。对于这种情况,还是可能找到变通的方法的,但这取决于你控制的是网络的哪一部分。这些方法包括改变用来在防火墙一端建立TCP连接的第一个分组的MSS(Maximum
Segment
Size,最大分段大小)。 对于一些支持老版本以太网协议的IBM系统(例如XSeries),可能只有在把最大传输单元设为1492之后才能在当下常见的局域网上进行运作。
如何检测网关的MTU
在本机打开dos窗口,执行: ping -f -l 1472 192.168.0.1
其中192.168.0.1是网关IP地址,1472是数据包的长度。请注意,上面的参数是“-l”(小写的L),而不是“-1”。如果能ping通,表示数据包不需要拆包,可以通过网关发送出去。如果出现:
Packet needs to be fragmented but DF set.
表示数据包需要拆开来发送。此时,减少数据包长度,再执行上面的ping命令。从1400到1472之间多试几次,就能找到合适的数据包长度了。把数据包长度加上数据包头28字节,就得到MTU的值。如果检测到网关的MTU值是1500,不需要修改。如果网关有防火墙ping不通,可以试试直接把MTU设为1400。
如何修改本机的MTU
修改方法如下: Windows平台下 1、运行regedit
2、打开:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces
3、Interfaces下有多个子项,每个子项对应一个网卡。请按如下方法选择网卡: A、确定本机用来连接Internet的网卡或拨号连接的IP,如192.168.0.19; B、用鼠标点击Interfaces上的子项,查看键值列表中的IPAddress项; C、如果IPAddress的键值与A中的IP相同,即192.168.0.19,则该子项就是要找的网卡。 4、进入该子项,在右边的窗口里按鼠标右键,选择“新建”->“DWORD
值”,输入名称“MTU”,按回车。再用鼠标双击“MTU”,弹出修改窗口,填入MTU的值(一般为十进制的1480)。 填写前请先把基数设为十进制。
设置好后,需要重启机器才能生效。 Windows 7(XP、Vista未实测) 1、使用管理员权限运行cmd
2、使用netsh interface ipv4 show subinterfaces命令看看MTU以及本地连接名称。
3、使用netsh interface ipv4 set subinterface "连接名" mtu=300
store=persistent
(注:这里的连接名是你使用上面命令看到的MTU值对应的这个连接名,他在右边显示。) 附:1、此方法不用重启;2、如是ipv6就将上面的ipv4改成ipv6
Linux下可使用如下命令修改 需要root权限 ifconfig 网卡 MTU值 如 ifconfig eth0 mtu
1460
MaxMTU是最大的TCP/IP传输单元,在TCP/IP协议中,将要传输的数据分成较小的组进行传输,每个组的大小为576字节。Windows默认的字节为1500,这是以太网的分组标准。ADSL使用的
PPPoE略小于这个数值,一般为1492。而某些网站采用的MaxMTU大于1492,所以,可能导致某些网页不能访问。修改Windows默认的MaxMTU可以解决这个问题。不论是
PC机上安装的PPPoE软件或者是内置在Modem的 PPPoE软件,在使用中都有可能遇到这个问题。 如果使用路由器出现此种情况,
请在 防火墙配置 => 基本设定 里, 将MTU改为手工, 设置为 1492 即可.
那如何确定路由器从ISP获得的 MTU 为 1500, 请见附件圈出的位置.
|
一.MQ基本操作
MQ中有几个很重要的组件:队列管理器(QueueManager)、队列(Queue)和通道(Channel)。其基本的操作方法如下:
创建队列管理器
crtmqm –q QMgrName
-q是指创建缺省的队列管理器
删除队列管理器
dltmqm QmgrName
启动队列管理器
strmqm QmgrName
如果是启动默认的队列管理器,可以不带其名字
停止队列管理器
endmqm QmgrName 受控停止
endmqm –i QmgrName 立即停止
endmqm –p QmgrName 强制停止
显示队列管理器
dspmq –m QmgrName
运行MQSeries命令
runmqsc QmgrName
如果是默认队列管理器,可以不带其名字
往队列中放消息
amqsput QName QmgrName
如果队列是默认队列管理器中的队列,可以不带其队列管理器的名字
从队列中取出消息
amqsget QName QmgrName
如果队列是默认队列管理器中的队列,可以不带其队列管理器的名字
启动通道
runmqchl –c ChlName –m QmgrName
启动侦听
runmqlsr –t TYPE –p PORT –m QMgrName
停止侦听
endmqlsr -m QmgrName
MQSeries命令
定义死信队列
DEFINE QLOCAL(QNAME) DEFPSIST(YES) REPLACE
设定队列管理器的死信队列
ALTER QMGR DEADQ(QNAME)
定义本地队列
DEFINE QL(QNAME) REPLACE
定义别名队列
DEFINE QALIAS(QALIASNAME) TARGQ(QNAME)
远程队列定义
DEFINE QREMOTE(QRNAME) +
RNAME(AAA) RQMNAME(QMGRNAME) +
XMITQ(QTNAME)
定义模型队列
DEFINE QMODEL(QNAME) DEFTYPE(TEMPDYN)
定义本地传输队列
DEFINE QLOCAL(QTNAME) USAGE(XMITQ) DEFPSIST(YES) +
INITQ(SYSTEM.CHANNEL.INITQ)+
PROCESS(PROCESSNAME) REPLACE
创建进程定义
DEFINE PROCESS(PRONAME) +
DESCR(‘STRING’)+
APPLTYPE(WINDOWSNT)+
APPLICID(’ runmqchl -c SDR_TEST -m QM_ TEST’)
其中APPLTYPE的值可以是:CICS、UNIX、WINDOWS、WINDOWSNT等
创建发送方通道
DEFINE CHANNEL(SDRNAME) CHLTYPE(SDR)+
CONNAME(‘100.100.100.215(1418)’) XMITQ(QTNAME) REPLACE
其中CHLTYPE可以是:SDR、SVR、RCVR、RQSTR、CLNTCONN、SVRCONN、CLUSSDR和CLUSRCVR。
创建接收方通道
DEFINE CHANNEL(SDR_ TEST) CHLTYPE(RCVR) REPLACE
创建服务器连接通道
DEFINE CHANNEL(SVRCONNNAME) CHLTYPE(SVRCONN) REPLACE
显示队列的所有属性
DISPLAY QUEUE(QNAME) [ALL]
显示队列的所选属性
DISPLAY QUEUE(QNAME) DESCR GET PUT
DISPLAY QUEUE(QNAME)MAXDEPTH CURDEPTH
显示队列管理器的所有属性
DISPLAY QMGR [ALL]
显示进程定义
DISPLAY PROCESS(PRONAME)
更改属性
ALTER QMGR DESCR(‘NEW DESCRIPTION’)
ALTER QLOCAL(QNAME) PUT(DISABLED)
ALTER QALIAS(QNAME) TARGQ(TARGQNAME)
删除队列
DELETE QLOCAL(QNAME)
DELETE QREMOTE(QRNAME)
清除队列中的所有消息
CLEAR QLOCAL(QNAME)
二.配置一个能够通信的远程连接
以上讲述了MQ的基本命令操作,但只知道这些是没有实际意义的。MQ的最终目的是实现远程通信,所以下面就以一个具体的例子来说明如何实现远程连接。这个例子的目的是建立可以实现消息传递的一对MQ服务器,它们分别基于NT和UNIX平台。
首先在NT端建一队列管理器
crtmqm –q QM_NT
启动队列管理器
strmqm QM_NT
运行MQ控制台命令
runmqsc QM_NT
创建死信队列
DEFINE QL(NT.DEADQ) DEFPSIST(YES) REPLACE
更改队列管理器属性,设置其死信队列
ALTER QMGR DEADQ(NT.DEADQ)
创建进程定义
DEFINE PROCESS(P_NT)+
APPLTYPE(WINDOWSNT)+
APPLICID(’ runmqchl -c SDR_NT -m QM_NT’)
创建本地传输队列
DEFINE QL(QT_NT) USAGE(XMITQ) DEFPSIST(YES) +
INITQ(SYSTEM.CHANNEL.INITQ)+
PROCESS(P_NT) REPLACE
创建远程队列定义,对应于UNIX机器上的本地队列Q_UNIX,传输队列为QT_NT
DEFINE QREMOTE(QR_NT)+
RNAME(Q_UNIX) RQMNAME(QM_UNIX)+
XMITQ(QT_NT)
创建发送方通道,其传输队列为QT_NT,远程主机地址为10.10.10.2,侦听端口为1414
DEFINE CHANNEL(SDR_NT) CHLTYPE(SDR)+
CONNAME(‘10.10.10.2(1414)’) XMITQ(QT_NT) REPLACE
创建服务器连接通道
DEFINE CHANNEL(S_NT) CHLTYPE(SVRCONN) REPLACE
在UNIX端创建队列管理器
crtmqm –q QM_UNIX
启动队列管理器
strmqm QM_UNIX
添加侦听程序
修改/etc/services文件,加入一行:
MQSeries 1414/tcp #MQSeries channel listener
修改/etc/inetd.conf文件,加入一行(启动侦听程序)
MQSeries stream tcp nowait mqm /usr/lpp/mqm/bin/amqcrsta amqcrsta
–m
QM_UNIX
运行以下命令,以使修改起作用
refresh –s inetd
运行MQ控制台命令
runmqsc QM_UNIX
创建死信队列
DEFINE QL(UNIX.DEADQ) DEFPSIST(YES) REPLACE
更改队列管理器属性,设置其死信队列
ALTER QMGR DEADQ(UNIX.DEADQ)
创建接收方通道,其名字必须与远程发送方相同
DEFINE CHANNEL(SDR_NT) CHLTYPE(RCVR) REPLACE
创建本地队列
DEFINE QL(Q_UNIX) DEFPSIST(YES) REPLACE
创建服务器连接通道
DEFINE CHANNEL(S_UNIX) CHLTYPE(SVRCONN) REPLACE
经过以上操作之后,远程连接的配置工作完成。接下来需要验证配置是否正确。
在NT端启动发送方通道
runmqchl –c SDR_NT –m QM_NT 或 start chl(SDR_NT)
从NT端发送消息到UNIX端
amqsput QR_NT QM_NT
在UNIX端接收消息
/usr/mqm/samp/bin/amqsget Q_UNIX QM_UNIX
若能收到消息,说明配置成功。
另,在NT下一般情况下在建立队列管理器时会自动建立侦听器,启动队列管理器时则会自动启动侦听程序。当然也可以手动配置侦听程序。
修改\winnt\system32\drivers\etc\services文件,在文件中加入一行:
MQSeries 1414/tcp #MQSeries channel listener
启动侦听程序
runmqlsr –t tcp –p 1414 –m QM_NT
以上说明了怎样建立简单的单向传输网络。消息从NT端传送到UNIX端。建立从UNIX端到NT端的远程连接和以上相仿,要建立双向的传输网络也是同样的道理。
三.配置JNDI
用JMS实现消息的发送和接收时,经常会用到JNDI。因为JNDI这种方式比较灵活,对于编程也比较简单。
在安装了MQSeries Client for
Java之后,在\java\bin目录下找到JMSAdmin.config文件。该文件主要用来说明Context的存储方式及存储地址,对应于文件中的两个参数INITIAL_CONTEXT_FACTORY和PROVIDER_URL。典型的JMSAdmin.config文件内容如下:
#INITIAL_CONTEXT_FACTORY=com.sun.jndi.ldap.LdapCtxFactory
INITIAL_CONTEXT_FACTORY=com.sun.jndi.fscontext.RefFSContextFactory
#INITIAL_CONTEXT_FACTORY=com.ibm.ejs.ns.jndi.CNInitialContextFactory
#
#PROVIDER_URL=ldap://polaris/o=ibm,c=us
PROVIDER_URL=file:/d:/temp
#PROVIDER_URL=iiop://localhost/
#
SECURITY_AUTHENTICATION=none
INITIAL_CONTEXT_FACTORY表示JMSAdmin
Tool使用的服务提供商。当前有三种受支持的值。com.sun.jndi.ldap.LdapCtxFactory用于
LDAP,如果使用它就必须安装一个LDAP服务器。com.sun.jndi.fscontext.RefFSContextFactory用于文件系统上下文,它只需要使用者提供存放上下文的文件路径。com.ibm.ejs.ns.jndi.CNInitialContextFactory是专门为
websphere提供的,它需要和websphere的CosNaming资源库一起使用。
PROVIDER_URL表示会话初始上下文的URL,由JMSAdmin
tool实现的所有JNDI操作的根。它和INITIAL_CONTEXT_FACTORY一一对应。
ldap://hostname/contextname 用于LDAP
file:[drive:]/pathname 用于文件系统上下文
iiop://hostname[:port]/[?TargetContext=ctx] 用于访问websphere
CosNaming名称空间
最后还有一个参数SECURITY_AUTHENTICATION,用于说明JNDI是否把安全性凭证传递给了您使用的服务供应商。只有当使用了LDAP服务供应商时,才使用此参数。此参数有三个值,none(匿名认证)、simple(简单认证)和CRAM-MD5认证机制。如果没有提供有效值,缺省值为none。
确认配置文件之后,可以在\java\bin目录下启动JMSAdmin控制台。也可以在任何目录下用下面的命令来启动控制台:
JMSAdmin –cfg MQ_JAVA_INSTALL_PATH\java\bin\JMSAdmin.config
其中MQ_JAVA_INSTALL_PATH为MQSeries Client for Java安装的根目录。
若启动失败,则好好检查一下您的环境变量是否设置正确。根据我个人的经验,除了把com.ibm.mq.jar和com.ibm.mqjms.jar加入到环境变量外,还要把fscontext.jar和providerutil.jar加入到环境变量。
进入JMSAdmin控制台后,您可以自由定义sub context。对于子上下文的操作,主要有一下命令:
display ctx
define ctx(ctxname)
change ctx(ctxname)
change ctx(=up)
change ctx(=init)
delete ctx(ctxname)
当然,在这里的主要任务并非是用来定义sub context,而是用来定义以下几个对象:
MQQueueConnectionFactory
MQTopicConnectionFactory
MQQueue
MQTopic
(还有其它的一些对象,如MQXAQueueConnectionFactory等,不常用到,在此不作说明。)
可以使用很多动词来操纵目录名称空间中的受管理对象。ALTER、DEFINE、DISPLAY、DELETE、COPY和MOVE,它们的用法都算比较简单,这里只列举一二以作说明。
例一:定义一QueueConnectionFactory,连接主机10.10.10.18,端口1414
DEFINE QCF(EXAMPLEQCF)+
DESC(Example Queue Connection Factory)+
TRAN(CLIENT)+
HOST(10.10.10.18)+
QMGR(QM_EXAMPLE)+
CHAN(S_EXAMPLE)+
PORT(1414)+
CCSID(1381)
例二:定义一Queue,其对应于MQ中的Q_EXAMPLE
DEFINE Q(EXAMPLEQL)+
DESC(Local queue)+
QMGR(QM_EXAMPLE)+
QUEUE(Q_EXAMPLE)+
CCSID(1381)
四.用JMS实现MQ编程
上面我们说明了怎样用JMSAdmin
Tool定义MQ对象的上下文。我们的最终目的是要用JMS来实现MQ编程,以实现在程序中对MQ队列进行收、发消息。所以,下面我们将重点讨论一下MQ的JMS实现。
如果您对JMS编程很熟悉,那么您也就会用JMS来实现MQ编程,因为用JMS来编写MQ程序与编写一般的JMS程序没有太大的差别。举个例子,当我们想发送一条消息到MQ的队列中,再从该队列中取回消息时,我们编程时主要有四个步骤。首先我们要初始化在程序中要用到的对象,然后才可以发送消息到队列中去,再就是收取消息了,最后要清除那些永久对象。这些都和普通的JMS程序相当。程序的源代码如下:
import java.util.Hashtable;
import javax.jms.*;
import javax.naming.*;
import javax.naming.directory.*;
public class sample {
protected QueueConnectionFactory factory=null;
protected QueueConnection connection;
protected QueueSession queueSession;
protected TextMessage outMessage;
protected QueueSender queueSender;
protected QueueReceiver queueReceiver;
public static final String qcfLookup="EXAMPLEQCF";
public static final String qLookup="EXAMPLEQL";
public static final String icf =
"com.sun.jndi.fscontext.RefFSContextFactory";
public String url ="file:/d:/temp";
public void sampleInit() throws Exception {
Hashtable environment = new Hashtable();
environment.put(Context.INITIAL_CONTEXT_FACTORY, icf);
environment.put(Context.PROVIDER_URL, url);
environment.put(Context.REFERRAL, "throw");
Context ctx=new InitialDirContext(environment);
factory = (QueueConnectionFactory)ctx.lookup(qcfLookup);
Queue q1=null;
q1=(Queue)ctx.lookup(qLookup);
connection = factory.createQueueConnection();
queueSession = connection.createQueueSession(false,
Session.AUTO_ACKNOWLEDGE);
queueSender = queueSession.createSender(q1);
queueSender.setDeliveryMode(DeliveryMode.NON_PERSISTENT);
outMessage = queueSession.createTextMessage();
queueReceiver = queueSession.createReceiver(q1);
connection.start();
}
public void sendMessageOut(String message) throws JMSException
{
outMessage.setText(message);
queueSender.send(outMessage);
}
public String receiveMessage() throws Exception{
return ((TextMessage)queueReceiver.receive()).getText();
}
public void sampleClose() throws JMSException {
queueSession.close();
connection.close();
}
public static void main(String[] args){
String rec;
sample sp = new sample();
try {
sp.sampleInit();
sp.sendMessageOut("Hello World!");
java.lang.Thread.sleep(4000);
rec=sp.receiveMessage();
System.out.println("Receive text is : "+rec);
sp.sampleClose();
}catch(Exception e) {
e.printStackTrace();
}
}
}
五.远程管理
MQ在WINDOWS平台下具有图形化管理界面,但在UNIX平台下却只能通过命令行来进行操作。这样就给使用者带来很大的不便。我们都希望能通过图形界面来进行管理配置。为了实现我们的想法,我们就必须建立远程管理。
实现远程管理有以下几个步骤:
1.被管理队列管理器上的命令队列SYSTEM.ADMIN.COMMAND.QUEUE存在并可用。对于MQ 2版本应执行
amqscoma.tst 脚本来创建。
2.使用strmqcsv命令来启动被管理队列管理器上的命令服务器。
3.确定被管理队列管理器上的服务器连接通道SYSTEM.ADMIN.SVRCONN是否存在,如果不存在则创建它。
4.一般Unix、Linux平台中MQ默认的字符集为819,而Windows平台为1381,所以你必须改变其字符集,使两边的字符集相同。一般改被管理的字符集。
5.如果被管理队列管理器上的操作用户与管理队列管理器上的操作用户不同,那么你首先要确认管理队列管理器上的操作用户在被管理队列管理器上存在并且有管理MQ的权限,再者,你需要修改服务器连接通道SYSTEM.ADMIN.SVRCONN的MCAUSER属性为管理队列管理器上的操作用户。
6.启动被管理队列管理器上的侦听器。
做完这些工作之后,直接在管理队列管理器的MQ管理工具中显示被管理队列管理器即可。然后你就可以象操作本地队列管理器一样,在被管理队列管理器上定义你需要的MQ对象。
六.通道维护
在配置远程连接的时候,我们曾经创建过进程定义。那我们为什么要去创建进程定义呢?这就涉及MQ通道维护的概念。
通道长时间没有消息触发就会自动断开连接,不再保持运行状态。时间的长短可以由自己设定,默认值为6000秒。消息请求再次来临的时候,就必须再次启动通道。有些通道,如服务器连接通道、接收方通道等是自动触发启动的。当消息请求发送到通道后,通道立即启动,进入运行状态。但也有一些通道不会自动启动,最典型的就是发送方通道。当有消息请求需要使用通道进行消息传递的时候,发送方通道也不会自动启动并把消息发送到远程队列,而是把消息留在了与其相关联的传输队列中。
但是,在实际应用中我们又不可能每过一段时间去启动一次通道,或当有消息来再去启动通道。那应该怎么办?首先我们创建一个进程定义,这个进程定义的目的就是用来启动发送方通道。然后我们在传输队列的进程名称属性栏指定刚才定义的进程定义名称,再把触发器控制开关打开。这样,当有消息进入传输队列后,传输队列的触发器会启动触发执行指定的进程,从而启动发送方通道,把消息传输到远程队列中去。
|
最好用sam;用命令可参考:
1)扩大文件系统,首先要找到这个文件系统所对应的逻辑卷,只有首先扩大逻辑卷,
给文件系统以扩大的空间,才能扩大文件系统。
2)为扩大逻辑卷,先进单用户,在根目录系统提示符下,键入命令:
“shutdown -y 0 ”
3)进入单用户后,先将所有文件系统mount上,键入命令:
“ mount -a ”
4)用bdf 命令看该文件系统是否已经mount上,如果mount上,用命令
“ umount 文件系统名” umount 该文件系统。例如 ,想要扩大“/usr”到500M ,就键入命令:
“ umount /usr ”
5)用命令:
“ lvextend -L 500 /dev/vg00/lvol4 ”
这里,假定 /usr 对应 /dev/vg00/lvol4
6)用命令:
“ extendfs /dev/vg00/lvol4 ”
扩大文件系统。
注:如果是vxfs文件系统,则用“ extendfs -F vxfs /dev/vg00/lvol4 ”
7)用命令:
“ mount /dev/vg00/lvol4 /usr ”
将文件系统 mount 到 /usr
这样,文件系统“/usr”就被扩大了,
8)用命令:
“ reboot ”
进入原来运行级。
什么是文件系统
UNIX的文件系统是一些文件和目录的集合。每个文件系统被存储在单独的逻辑卷或整个硬盘分区上。典型的HP-UX主机通常有多个文件系统。下面是你的机器上可能存在的几个文件系统:
/usr下的文件通常被存储在一个文件系统中。
/var下的文件通常被存储在另一个文件系统中。
/tmp下的文件通常也被存储在另一个文件系统中。
根文件系统是一个包含/etc、/dev、/sbin等目录的特殊文件系统。
配置多个文件系统的优点
虽然你的文件和目录都可以被存储在根文件系统中,但将文件目录放到各个单独的文件系统中有很多好处:
系统管理员能给每个文件系统分配固定的硬盘空间,保证不让一个文件系统独占整个硬盘。系统管理员也许会分配100MB空间给/tmp文件系统,这保证了/tmp下的临时文件最多可以使用系统上的100MB硬盘空间,硬盘上的剩余空间可以保留给其他文件系统。
各个文件系统可以被分别调整,许多与文件系统有关的参数能够极大地影响系统的性能。一些文件系统可能因存储大文件而被优化,另一些则可能因存储小文件被优化。
可在一个文件系统上执行文件系统维护任务,而其他文件系统仍可继续被用户使用。
创建一个文件系统的步骤
第一步:创建PV,把c0t2d0这块磁盘加入到一个PV
# pvcreate
/dev/rdsk/c0t2d0
//此时磁盘为裸设备,所以是rdsk
Physical volume "/dev/rdsk/c0t2d0" has been successfully
created.
第二步:创建VG
# mkdir /dev/vg01
# mknod /dev/vg01/group c 64 0x010000
//创建一个控制器文件,指定主号为64,次号为0x010000
# vgcreate /dev/vg01 /dev/dsk/c0t2d0
//从c0t2d0这个磁盘去创建一个vg01
Increased the number of physical extents per physical volume
to 8683.
Volume group "/dev/vg01" has been successfully created.
Volume Group configuration for /dev/vg01 has been saved in
/etc/lvmconf/vg01.conf
第三步:创建LV
# lvcreate -L 200 -n lv_test
vg01
//从vg01中创建一个名为lv_test大小为200M的文件系统
Logical volume "/dev/vg01/lv_test" has been successfully
created with
character device "/dev/vg01/rlv_test".
Logical volume "/dev/vg01/lv_test" has been successfully
extended.
Volume Group configuration for /dev/vg01 has been saved in
/etc/lvmconf/vg01.conf
第四步:创建文件系统
# newfs -F vxfs /dev/vg01/rlv_test
//创建文件系统,可以不加-F vxfs参数,默认就是vxfs文件系统
version
4 layout
204800
sectors, 204800 blocks of size 1024, log size 1024 blocks
unlimited inodes, largefiles not supported
204800
data blocks, 203656 free data blocks
7
allocation units of 32768 blocks, 32768 data blocks
last
allocation unit has 8192 data blocks
# mkdir
/lv_test
//创建一个挂载点
# mount /dev/vg01/lv_test /lv_test
//挂载新建的文件系统
# bdf
Filesystem
kbytes
used avail %used Mounted
on
/dev/vg00/lvol3
2048000 144864
1888296 7%
/
/dev/vg00/lvol1
990968 60888
830976 7%
/stand
/dev/vg00/lvol8
6144000 862544
5241400 14% /var
/dev/vg00/lvol7
4096000 1389016 2685880 34%
/usr
/dev/vg00/lvol5
8192000 710896
7422720 9%
/tmp
/dev/vg00/lvol4
8192000 2832160 5318008 35%
/opt
/dev/vg00/lvol6
1024000 3024
1013064 0%
/home
/dev/vg00/gmylv
16384
1109
14328 7%
/gmylv
/dev/vg01/lv_test
204800
1157
190923 1%
/lv_test
//已经挂到系统上
#
现在来测试一下,我们FTP到系统,上传一个名为test,内容也为test的文本文件上去
C:\Documents and Settings\xghe>d:
D:\>ftp 192.168.0.1
Connected to 192.168.0.1.
220 hp FTP server (Version 1.1.214.4(PHNE_34544) Fri Feb 24
15:03:24 GMT 2006)
eady.
User (192.168.0.1:(none)): root
331 Password required for root.
Password:
230 User root logged in.
ftp> pwd
257 "/" is current directory.
ftp> cd /lv_test
250 CWD command successful.
ftp>
binary
//将传输方式改为二进制,默认为ASCii
200 Type set to I.
ftp> put
test.txt //put表示上传
200 PORT command successful.
150 Opening BINARY mode data connection for test.txt.
226 Transfer complete.
ftp: 发送 4 字节,用时 0.00Seconds 4000.00Kbytes/sec.
ftp>
# cd /lv_test
# ll
total 2
drwxr-xr-x 2
root
root
96 Mar 24 11:24 lost+found
-rw-r----- 1
root
sys
4 Mar 24 11:28 test.txt
# cat test.txt
test
//试验完!
前言:多数人在使用Google搜索的过程是非常低效和无谓的,如果你只是输入几个关键词,然后按搜索按钮,你将是那些无法得到Google全部信息的用户,在这篇文章中,Google搜索专家迈克尔.米勒将向您展示如何更智能、更高效地进行Google的系列搜索。
Google是一个非常精密成熟的搜索引擎,但大多数的用户都没有能完全地利用到它的能力。一般人就是在Google的搜索框中输入一两个关键字,然后点击“搜索”按钮,等着Google显示出它第一页的搜索结果。这是一个相当简单模式匹配算法的搜索,不幸的是,通常此时出现的大部分都是并不需要的结果。
其实,还是有更好的方式能够让搜索产生一些更少、更为准确的结果。你所需要做的事只是学习一些简单的技巧,你就能很快得到更多更好的Google搜索结果。
技巧一:使用正确的方法
无论你是使用一个简单或是高级的Google搜索,在此都存在你应该使用的某种可靠的方法。遵循适当的方法你就能获得非常准确的结果;要是忽略这条建议的话,你也许就会看到大量不相关的结果或是缺乏你想要的相关结果。
虽然有很多不同(且同样有效的)方法用于网络搜索,我保证这个特别的方法将能带来最棒的结果。这是一个分六步骤的过程,如下:
1、首先,想好你想要寻找什么。哪些词能够最好地描述你要寻找的信息或者概念?哪些词是你能够用来替换的?有没有那些词是可以不必包括在你想要搜索的更好定义你的需求之内?
2、构建你的搜索要求。使用尽可能多你所需要的关键词;越多越好。如果皆存在可能的话,试着用适当的搜索操作来使你的搜索更精炼——或者,如果你愿意的话,可以使用高级搜索页面。
3、点击“搜索”按钮进行搜索。
4、评估一下搜索结果页面上的匹配程度。如果一开始的结果与你想要的不一致,再精炼你的搜索要求并重新搜索——或转向更合适的搜索站点再进行搜索。
5、选择你想要查看的匹配的页面,点击进行浏览。
6、保存这些最符合你需求的信息。
换言之,这需要你在搜索之前思考清楚,接着在获得最初结果后精炼你的搜索。这些多做的努力都是轻微的,但确实很值得。
技巧二:合理利用一个“与/或”的搜索
大多数的用户都没有意识到,Google会自动假定一次搜索要求中所有的词之间都是一种“和”的关系。也就是,如果你输入两个词,它就会假定你所寻找的页面是包含这两个词的。它不会反馈给你仅包含其中一个词的页面。
这就使得你无须在输入搜索要求时输入一个“和”。如果你想要搜索的包括“Bob”和“Ted”,你所需要做的就是输入bob
ted即可。Google会自己假定一个“和”,并自动地将它包括在内部的索引搜索内。
这与在所要求的词之间假定“或”是不同的。例如,对比输入的要求“bob
ted”(记得,这个实际上是bob和ted)与“bob或ted”。根据第一个要求所得的结果所包含的页面会共同提到Bob和Ted.而后者,结果所包含的页面会只单独提到Bob,也有些页面是单独提到Ted,还有一些是共同提到他们二者的。这是一个微妙的差异,但却是很重要的。
因此,如果你想要一个“与/或”的搜索——搜索包括一个或另一个词的页面,但不一定是都包括二者——你必须在两个关键词之间插入一个带有“或者”功能的操作。当你输入这个“OR”的表示“或者”操作时,请确保所输入的要大写,否则Google会将它忽视为一个忽略的单词(stop
word)——也我们接下去将要讲到的。
技巧三:你的搜索中包括或不包括的词
关于这些“and”和“or”的词,Google会自动地将这些在你输入的搜索要求中的不重要的、普通的词忽略掉。这些被称作是“忽略的单词”,包括
“and”、“the,”、“where”、“how”、“what”、“or”(所有字母皆为小写,还有其它一些类似的词——包括一些单独的数字或单独的字母(例如
“a”)。
在搜索中包含忽略的单词并没有什么大碍,不过会使搜索速度有些下降,这就是Google将它们剔除的原因。举一个例子,你想要搜索的是“how
a toaster works”(烤箱如何工作),Google会移除“how”和“a”两个词,并自行按新的更短的关键词“toaster
works”进行搜索。
如果你想要让这些一般的词包含在你的搜索要求内,你可以通过让Google必须在搜索中包含这些特定的词,使它不去排除“忽略的单词”。想要做到这点,你可以在你确实需要的词之前加上一个“+”符号。例如,要在搜索要求中包含“how”,你应该输入“+how”。请确保在+符号之前有一个空格符,而不是在它之后。
从另一方面来说,有时你会想要通过排除一些包含特定词的页面来精炼你的搜索结果。你可以通过使用一个“-”号来去掉搜索结果中不想要包括在内的词;在你的搜索要求中任何之前加上了“-”符号的词都会自动地排除在搜索结果之外。同样地,也请记住在“-”符号之前留一个空格符。
例如,如果你想要搜索“bass”,你所得到的页面可能会包括男歌手一类的或是关于鱼的一类的。如果你仅向搜索的是歌手这类的页面,输入搜索要求时应如下:“bass
-fish”。
技巧四:搜索近似的词
不确定你在一次搜索中想要搜索的词是正确的?你是否担心一些页面会使用可替代的词来描述你想要的东西呢?
幸运的是,Google能够让你搜索近似的词——叫做同义词——通过使用“~”符号。只要在想要搜索的词之前加上“~”符号,Google就会搜索所有包括这个词以及合适的近义词的页面。
例如,要搜索类似“elderly”的词,输入“~elderly”,所得到的页面就会不仅是包括“elderly”这个词,还会有包括“senior”、“older”、“aged”等等词的页面。
在此还有个额外的技巧:如果要只是列出近义词的页面,而不需要给出许多原先输入的那个词的页面,可以用“-”符号来连接“~”操作,例如
“~keyword
-keyword”。这样就能在近义词所得的结果中排除原先输入的词。在先前的例子中,要得到仅有“elderly”近义词的搜索结果,就输入
“~elderly -elderly”即可。
技巧五:搜索特定的词组
当你搜索一个特定词组时,如果你只是简单地输入词组中所有的词你是无法得到最好的结果的。Google也许能够反馈出包含这个词组的结果,但它也会列出包含你所输入所有词的结果,却未必让这些词按照正确的顺序。
如果你要搜索一个特定的词组,你应该将整个词组放在一个引号内。这样就能让Google搜索规定顺序的精确的关键词。
例如,如果你要搜索“Monty Python”,你可以输入monty
python作为你的搜索要求,接着你也许会获得可接受的结果;这些结果中会包含有着“monty”和“python”两个词的页面。但这些结果并不仅是包含了关于英国喜剧团体的页面,还包括了名叫Monty的蛇以及名叫Monty的家伙,他养了蛇来当宠物,还有其它一些包括了“monty”和
“python”的词的页面,即使它们之间看起来似乎毫无关联。
为了将搜索结果限定在只关于Monty
Python喜剧团之内,也就是你想要搜索的页面是按规定的顺序,将这两个词作为一个词组包含在内的,你就应该在输入搜索要求时输入"monty
python"——确保这个词组在引号之内。这样的话,如果没有按照规定的顺序将这两个次匹配为一个精确的词组,这个页面就不会被列在搜索结果当中。
技巧六:列出相似的页面
你是否有发现过一个网页是你确实很喜欢的,又想知道是否还有与它类似的其它网页呢?不需要再疑虑地思考了;你可以使用Google的相关来寻找:这个操作算符所显示的页面会与特定的页面在某些方面是相似的。例如,如果你很喜欢InformIT上的文章,你可以通过输入
“related:http://www.informit.com”来寻找类似的页面。
技巧七:通过其它的操作算符调整你的搜索
使用相关操作算符只是众多你可用来调整Google搜索结果的方法之一。所有的这些输入的操作算符都是以相同的方式工作的,将这些算符作为你搜索请求的一部分输入,再将变量紧接在这些输入的操作算符之后的冒号之后(而不是空格),就像这样:“‘操作算符’:‘变量’”。
有哪些搜索的操作算符是你可以利用的呢?以下是一个简短的清单:
- 算符 用途 用法
- allinanchor:
限制搜索的词语是网页中链接内包含的关键词(可使用多个关键词)allinanchor:keyword1
keyword2
- allintext: 限制搜索的词语是网页内文包含的关键词(可使用多个关键词)allintext:keyword1
keyword2
- allintitle:
限制搜索的词语是网页标题中包含的关键词(可使用多个关键词)allintitle:keyword1
keyword2
- allinurl: 限制搜索的词语是网页网址中包含的关键词(可使用多个关键词)inurl:keyword1
keyword2
- filetype: 限制所搜索的文件一个特定的格式 filetype:extension
- inanchor: 限制搜索的词语是网页中链接内包含的关键词 inanchor:keyword
- intext: 限制搜索的词语是网页内文包含的关键词 intext:keyword
- intitle: 限制搜索的词语是网页标题中包含的关键词 intitle:keyword
- inurl: 限制搜索的网页的地址 inurl:keyword
- site: 限制所进行的搜索在指定的域名或网站内 site:domain
技巧八:搜索特定的事实
如果你要搜索一些客观事实,Google也许能够帮得上忙。是的,Google总是能够反馈给你一个匹配你指定的搜索要求的清单,但只要你能够正确地描述了你的搜索要求,且接着搜索的事实是Google已经预先鉴定了额,你就能在搜索结果页面的最顶端得到你所需要的精确信息。
我们在此谈到的有哪些类型的信息呢?是一些事实性的信息,例如诞生日、诞生地、人口等等。你所需要做的就是输入你想要知道的描述事实的搜索要求。例如:
要查询圣弗朗西斯科的人口,则输入“人口 圣弗朗西斯科”。
要查询马克·吐温在哪里出生,则输入“出生地 马克吐温”。
要查询总统比尔·克林顿什么时候出生,则输入“生日 比尔克林顿”。
要查询雷蒙德·钱德勒什么时候去世,则输入“去世 雷蒙德·钱德勒”。
要查询谁是德国总统,则输入“总统 德国”。
这些问题的答案就会显示在搜索结果页面的顶部。你能够获根据关联的网站得应对你的疑问的正确答案。点击相关的链接还能从这个资源里获悉更多的东西。
技巧九:搜索Google Directory
Google在它的搜索数据库中将成千上万的网页索引化——这就能使得不会产生压倒性数量的搜索结果。量确实已经够了,但有时你也许会更愿意得到一些高质量的结果。
由于质量较数量更为重要,就可以绕过主要的Google搜索引擎而使用Google Directory来代替。Google
Directory是一个网页清单相对较小的数据库,它们都是通过一个人工编辑团队手动精心挑选的。Google
Directory是有被注释和组织到相关的话题类目下的。你可以通过类目来浏览网页目录,或是搜索指定的项目。
Google Directory是一个可用来搜索大量Google网页索引实用选择。Google
Directory的结果比起你在更大的搜索索引范围中的搜索结果更为集中且高质,也能够帮助你在任何给定的类目下更好地认识什么是可用的信息。另外,如果你喜欢,你也可以利用浏览类目来替代搜索。
要进入Google
Directory,点击Google主页上的“更多”链接,在接下来的页面中选择类别。当然,你也可以直接进入Google的Directory,只要在浏览器中输入directory.google.com即可。
技巧十:使用Google的其它专业搜索
Google
Directory不仅仅是Google所提供的除了主搜索引擎之外的唯一选择。根据你所做的搜索类型,你也可以通过使用其中Google更为专业的搜索站点之一来得到更好的结果。它们包括:
Froogle可以用来搜索那些有着最低价格的特定商品的在线购物网站。
Google
Answers所提供的服务是直接让你的搜索需求面向专业人员的小组,大多数都是用于当你有着更为复杂的问题,而无法通过简单的搜索来解答的时候。
Google Apple Macintosh
Search主要是在apple.com域名中以及和其它与苹果相关的站点进行搜索。
Google Blog Search是用来搜索博客和博客文章的。
Google Book Search可以搜索成千上万的小说和非小说类图书的全文。
Google BSD UNIX Search可以搜索到大量专门为BSD版本的UNIX操作系统专业化的站点。
Google Groups可以搜索到Google Groups档案的相关文章。
Google Linux Search用来搜索大量与Linux相关的网站。
Google Microsoft
Search可以搜索主要是microsoft.com域名中的内容以及其它微软相关的站点。
Google News可用来搜索大量有最新新闻和头条的新闻网站,也能够搜索历史的新闻资料,一直可以追溯到两个世纪之前。
Google Scholar在一个有着学术杂志、文章、报纸、论文和书籍的数据库中进行搜索,也能够选择大学或研究书库。
Google U.S. Government
Search是用来搜索那些美国政府的网站——这是一个最好的用来搜索官方性政府举措、信息、报告等等的地方。
Google University
Search能在一个有着超过600所大学网站的数据库中进行搜索——能够用来查询课程安排、入学资料等等。
原文作者:Michael Miller
原文标题:Ten Tips for Smarter Google Searches
原文地址:http://www.informit.com/articles/article.asp?p=675274&rl=1
编译人:雪影蓝风(IT168)
译文地址:http://publish.it168.com/2006/1213/20061213001101.shtml
局域网用户的限制和反限制
可能现在对局域网上网用户限制比较多,比如不能上一些网站,不能玩某些游戏,不能上MSN,端口
限制等等,一般就是通过代理服务器上的软件进行限制,如现在谈的最多的ISA Server
2004,或者是通
过硬件防火墙进行过滤。下面谈谈如何突破限制,需要分限制情况进行说明:
一、单纯的限制某些网站,不能访问,网络游戏(比如联众)不能玩,这类限制一般是限制了欲访问
的IP地址。
对于这类限制很容易突破,用普通的HTTP代理就可以了,或者SOCKS代理也是可以的。现在网上找
HTTP代理还是很容易的,一抓一大把。在IE里加了HTTP代理就可以轻松访问目的网站了。
二、限制了某些协议,如不能FTP了等情况,还有就是限制了一些网络游戏的服务器端IP地址,而这
些游戏又不支持普通HTTP代理。
这种情况可以用SOCKS代理,配合Sockscap32软件,把软件加到SOCKSCAP32里,通过SOCKS代理访问
。一般的程序都可以突破限制。对于有些游戏,可以考虑Permeo Security Driver
这个软件。如果连
SOCKS也限制了,那可以用socks2http了,不会连HTTP也限制了吧。
三、基于包过滤的限制,或者禁止了一些关键字。这类限制就比较强了,一般是通过代理服务器或
者硬件防火墙做的过滤。比如:通过ISA Server 2004禁止MSN
,做了包过滤。这类限制比较难突破,普
通的代理是无法突破限制的。
这类限制因为做了包过滤,能过滤出关键字来,所以要使用加密代理,也就是说中间走的HTTP或者
SOCKS代理的数据流经过加密,比如跳板,SSSO,
FLAT等,只要代理加密了就可以突破了,用这些软件
再配合Sockscap32,MSN就可以上了。 这类限制就不起作用了。
四、基于端口的限制,限制了某些端口,最极端的情况是限制的只有80端口可以访问,也就只能看
看网页,连OUTLOOK收信,FTP都限制了。当然对于限制几个特殊端口,突破原理一样。
这种限制可以通过以下办法突破:
1、找普通HTTP80端口的代理,12.34.56.78:80,象这样的,配合socks2http,把HTTP代理装换成
SOCKS代理,然后再配合SocksCap32,就很容易突破了。这类突破办法中间走的代理未加密。通通通软
件也有这个功能。
2、用类似FLAT软件,配合SocksCap32,不过所做的FLAT代理最好也是80端口,当然不是80端口也没
关系,因为FLAT还支持再通过普通的HTTP代理访问,不是80端口,就需要再加一个80端口的HTTP
代理。
这类突破办法中间走的代理加密,网管不知道中间所走的数据是什么。代理跳板也可以做到,不过代理
仍然要80端口的。对于单纯是80端口限制,还可以用一些端口转换的技术突破限制。
五、以上一些限制综合的,比如有限制IP的,也有限制关键字,比如封MSN,还有限制端口的情况。
一般用第四种情况的第二个办法就可以完全突破限制。只要还允许上网,呵呵,所有的限制都可以
突破。
六、还有一种情况就是你根本就不能上网,没给你上网的权限或者IP,或者做IP与MAC地址绑定了。
两个办法:
1、你在公司应该有好朋友吧,铁哥们,铁姐们都行,找一个能上网的机器,借一条通道,装一个小
软件就可以解决问题了,FLAT应该可以,有密钥,别人也上不了,而且可以自己定义端口。。其他能够
支持这种方式代理的软件也可以。我进行了一下测试,情况如下:局域网环境,有一台代理上网的服务
器,限定了一部分IP,给予上网权限,而另一部分IP不能上网,在硬件防火墙或者是代理服务器上做的
限制。我想即使做MAC地址与IP绑定也没有用了,照样可以突破这个限制。
在局域网内设置一台能上网的机器,然后把我机器的IP设置为不能上网的,然后给那台能上网的机
器装FLAT服务器端程序,只有500多K,本机通过FLAT客户端,用SOCKSCAP32加一些软件,如IE,测试上
网通过,速度很快,而且传输数据还是加密的,非常棒。
2、和网络管理员搞好关系,一切都能搞定,网络管理员什么权限都有,可以单独给你的IP开无任何
限制的,前提是你不要给网络管理员带来麻烦,不要影响局域网的正常运转。这可是最好的办法了。
另外,在局域网穿透防火墙,还有一个办法,就是用HTTPTUNNEL,用这个软件需要服务端做配合,
要运行httptunnel的服务端,这种方法对局域网端口限制很有效。
隐通道技术就是借助一些软件,可以把防火墙不允许的协议封装在已被授权的可行协议内,从而通
过防火墙,端口转换技术也是把不允许的端口转换成允许通过的端口,从而突破防火墙的限制。这类技
术现在有些软件可以做到,HACKER经常用到这类技术。
HTTPTunnel,Tunnel这个英文单词的意思是隧道,通常HTTPTunnel被称之为HTTP暗道,它的原理就
是将数据伪装成HTTP的数据形式来穿过防火墙,实际上是在HTTP请求中创建了一个双向的虚拟数据连接
来穿透防火墙。说得简单点,就是说在防火墙两边都设立一个转换程序,将原来需要发送或接受的数据
包封装成HTTP请求的格式骗过防火墙,所以它不需要别的代理服务器而直接穿透防火墙。HTTPTunnel刚
开始时只有Unix版本,现在已经有人把它移植到Window平台上了,它包括两个程序,htc和hts,其中
htc是客户端,而hts是服务器端,我们现在来看看我是如何用它们的。比如开了FTP的机器的IP是
192.168.1.231,我本地的机器的IP是192.168.1.226,现在我本地因为防火墙的原因无法连接到
FTP上
,现在用HTTPTunnel的过程如下:
第一步:在我的机器上(192.168.1.226)启动HTTPTunnel客户端。启动MS-DOS的命令行方式,然后执
行htc -F 8888
192.168.1.231:80命令,其中htc是客户端程序,-f参数表示将来自192.168.1.231:80的
数据全部转发到本机的8888端口,这个端口可以随便选,只要本机没有占用就可以。
然后我们用Netstat看一下本机现在开放的端口,发现8888端口已在侦听。
第二步:在对方机器上启动HTTPTunnel的服务器端,并执行命令
“hts -f localhost:21
80”,这个命令的意思是说把本机21端口发出去的数据全部通过80端口中
转一下,并且开放80端口作为侦听端口,再用Neststat看一下他的机器,就会发现80端口现在也在侦听
状态。
第三步:在我的机器上用FTP连接本机的8888端口,现在已经连上对方的机器了。
可是,人家看到的怎么是127.0.0.1而不是192.168.1.231的地址?因为我现在是连接本机的8888端口
,防火墙肯定不会有反应,因为我没往外发包,当然局域网的防火墙不知道了。现在连接上本机的8888
端口以后,FTP的数据包不管是控制信息还是数据信息,都被htc伪装成HTTP数据包然后发过去,在防火
墙看来,这都是正常数据,相当于欺骗了防火墙。
需要说明的是,这一招的使用需要其他机器的配合,就是说要在他的机器上启动一个hts,把他所提
供的服务,如FTP等重定向到防火墙所允许的80端口上,这样才可以成功绕过防火墙!肯定有人会问,如
果对方的机器上本身就有WWW服务,也就是说他的80端口在侦听,这么做会不会冲突?HTTPTunnel的优点
就在于,即使他的机器以前80端口开着,现在这么用也不会出现什么问题,正常的Web访问仍然走老路子
,重定向的隧道服务也畅通无阻!(T002)
基本概念不多解释了,直入主题。GNU HTTP Tunnel (http://www.nocrew.org/software/httptunnel.html)是一个开源的http-tunnel项目,包括了tunnel
server(hts命令)和tunnel
client(htc命令),有(x)nix和windows版本。我们就用它来建立自己的tunnel。
1。静态tunnel。
http-tunnel是一个完全透明的通道,直接将你的连接forward给目标服务端口,因此当你连接tunnel的本地侦听端口时,就相当于直接连接到目标服务端口。例如你要建立一条可以访问外部POP3服务器的隧道,可以建立如下连接:
htc ------------> http proxy
------------------------> hts
------------------------------> POP3 serve
(localhost:8888)
(proxyhost:3128)
(tunnelserver:80)
(pop3server:110)
在你自己的机器上运行htc,外部充当tunnel
server的机器上的80端口运行hts,htc将数据打包成http请求,通过proxy连接到hts,hts解包后将连接forward给POP3服务器。命令如下:
在tunnel server机器上:
hts --forward-port pop3server:110
80
(将pop3server替换成实际的IP)
在本地机器上:
htc --forward-port 8888 --proxy proxyhost:3128
tunnelserver:80
(将proxyhost和tunnelserver替换成实际的IP)
通过这样的配置,你可以用Outlook或Foxmail连接本机的8888端口,就相当于直接连接到POP3服务器了。
2。动态的tunnel。
上面建立了一条可以访问POP3服务的隧道,但缺点是只能访问某一个指定的POP3服务器,要访问其他的服务器还得按同样的方法再建立一条隧道,很不方便。既然hts可以将连接forward给POP3服务器,那让它forward给一个SOCKS5服务,不是就可以实现动态的tunnel,可以连接任意服务了吗?yeah!没错!我们建立这样的连接:
htc ------------> http proxy
------------------------> hts
------------------------------> SOCKS5 serve
(localhost:8888)
(proxyhost:3128)
(tunnelserver:80)
(socks5server:1080)
命令就不说了,照第一点改一下就行。这样就相当于在localhost:8888运行了一个SOCKS5服务,设置一下你的网络程序(Outlook,NetAnt,FlashGet,QQ......),让他们通过SOCK5访问网络,就OK了。
3。利用http proxy的CONNECT支持。
大多数http
proxy支持CONNECT命令,但一般只支持CONNECT到外部服务器的443(https)端口。这是为了允许访问外部的https服务。由于porxy对于CONNECT的连接是直接转发,不做任何分析处理或缓存,所以利用CONNECT可以获得比较快的速度。
由于hts和htc不支持CONNECT连接,我们可以使用另一个专门支持CONNECT的程序DesProxy
http://desproxy.sourceforge.net
来建立一个tunnel。由于使用CONNECT建立了直接的TCP连接,不需要将数据按http格式打包和解包,所以连tunnel
server也不需要了,只需要在你原来运行hts机器上运行一个SOCKS5就行了,连接如下:
desproxy -------------> http proxy
----------------------> SOCKS5 server
(localhost:8888)
(proxyhost:3128)
(tunnelserver:443)
desproxy命令的用法:
desproxy remote_host remote_port proxy_host proxy_port
local_port
在这里remot_host,remote_port就是tunnelserver:443,proxy_host,proxy_port是porxyhost:3128,local_port就是8888。
注意必须把SOCKS5运行在443端口,如果运行在其他端口的话,CONNECT请求会被http
proxy拒绝。同样,我们在localhost:8888得到了一个可以访问外部的SOCK5服务。
4。最简单,最安全而且快速的方式:利用SSH + CONNECT。
实际上SSH提供了SOCKS5的功能,利用ssh客户端或PuTTY可以在本地建立一个SOCKS5服务,而且PuTTY也直接支持http
proxy,最大的好处是ssh的数据连接是加密的,保证了数据的安全。使用ssh的连接如下:
PuTTY(或plink) ------------> http
proxy ---------------------> ssh
server
(localhost:8888)
(proxyhost:3128)
(tunnelserver:443->22)
首先我们要让ssh
server在443端口侦听,ssh默认端口是22,我们可以修改ssh的配置,或用iptables将443端口重定向到22端口,服务端的配置就OK了。然后在PuTTY建立一个new
session,填上ssh服务器的ip和port;在"Connection->Proxy"页,填上http
proxy的ip和port;在"SSH -> Tunnels"页,"Source
port"填本地的端口,在这里我们用8888",Destination"选"Dynamic",按"Add"将这个forward
port加上,就OK了。配置完成后,用PuTTY登陆上ssh,用netstat
-an可以看到PuTTY已经在localhost:8888侦听了,这是一个SOCKS5服务,下面改怎么用,就不用我罗嗦了吧:-)。另外在"SSH"页,可以根据要求选择"Protocol
options"。保存session后,也可以用命令行的plink命令来利用这个session:
plink -load
session_name
(session_name就是session保存的名称)
登陆后效果也一样。
前段时间在重庆帮助一家IT公司从北大青岛招聘一位实施工程师,一共面试了两位北大青鸟的学生。
第一步,肯定是自我介绍,从自我介绍中,大致就能定位水平。
第二步,专业知识考核,注重其在校的项目经验
java:
javaWEB应用目录结构、jsp、servlet、MVC设计模式等
网络:
OSI七层模型、DNS、DHCP、如何划分子网等
数据库: SQL语句、触发器、视图、缓冲池等
应用中间件:WEBSPHERE、TOMCAT、JBOSS、WEBLOGIK、APACHE、MQ
webSphere应用服务器cell、node、server
拓扑结构、部署应用程序、集群概念等
测试工具:LOADRUNNER的使用
是否了解一些主流的服务器配置,双机热备概念等
第三步,综合考核,注重理解能力、沟通能力、耐心等
由于地震是空中的粉尘数量大增,加上地磁地壳中金属矿物的加热影响使地面水份快速蒸发,也就是说在地震发生前应该有一段闷热的天气,而地震发生后地面和地下能量大面积释放加速了天空水气的饱和度,同时巨大的能量使这部分水气上升速度和高度大增而进入高空低温区域,这些水气和粉尘就凝结为水或冰散落下来,这就是地震后形成下雨的原因。同样的原理大型森林火灾也最终会以暴雨结束。
一周年未发表BLOG文章纪念