NetCat,在网络工具中有“瑞士军刀”美誉,其有Windows和Linux的版本。因为它短小精悍(1.84版本也不过25k,旧版本或缩减版甚至更小)、功能实用,被设计为一个简单、可靠的网络工具,可通过TCP或UDP协议传输读写数据。同时,它还是一个网络应用Debug分析器,因为它可以根据需要创建各种不同类型的网络连接。
例如将server1的 test1.sh 文件 传入到server2的 test2.sh文件(将会覆盖写入):
#先在server2用nc激活监听:
> nc -lp 1234 > test2.sh
#然后在server1上运行(这里的1表示超时时间):
> nc -w 1 supervisor01z 1234 < test1.sh
例如将server1的shells目录传送到server02
#server2
> nc -l 1234 |tar zxvf -
#server1
> tar zcvf - shells |nc supervisor01z 1234
而使用scp同样可以完成同样的功能:(将会覆盖写入)
scp -r shells/ ubuntu@supervisor01z:/home/ubuntu/test
#server1
> nc -lp 1234
#server2
> nc supervisor01z 1234
#这样双方就可以相互交流了
#监听端口(-k表示长连接 -s表示绑定的ip)
$ nc -k -l 8888
#向某个主机的端口发消息
$ nc nimbusz 8888
#查看帮助
$ nc -h
import java.io.BufferedWriter;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.lang.management.ManagementFactory;
import java.lang.management.RuntimeMXBean;
import java.text.SimpleDateFormat;
import java.util.Date;
/**
* NC工具类
* @author zhangqingli
*
*/
public class NCUtil {
private static SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.S");
/**
* 将消息写入nc
* @param o
* @param msg
*/
public static void write2NC(Object o, String msg) {
try {
//系统时间
Date now = new Date();
String currrentTime = sdf.format(now);
//进程号
RuntimeMXBean runtimeMXBean = ManagementFactory.getRuntimeMXBean();
String pidname = runtimeMXBean.getName(); //1234@xxx
//线程名称-线程号
String tname = Thread.currentThread().getName();
long id = Thread.currentThread().getId();
tname += "-" + id;
//类名称-hashcode
String oname = o.getClass().getSimpleName() + "-" + o.hashCode();
String prefix = "["+ currrentTime + "," + pidname + "," + tname + "," + oname +"] ";
Process process = Runtime.getRuntime().exec("nc zhangqingli.local 8888");
OutputStream os = process.getOutputStream();
BufferedWriter br = new BufferedWriter(new OutputStreamWriter(os));
br.write(prefix + msg + System.getProperty("line.separator"));
br.flush();
br.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}