linux nc 命令详解

KinglyJn      2017-07-01

NetCat,在网络工具中有“瑞士军刀”美誉,其有Windows和Linux的版本。因为它短小精悍(1.84版本也不过25k,旧版本或缩减版甚至更小)、功能实用,被设计为一个简单、可靠的网络工具,可通过TCP或UDP协议传输读写数据。同时,它还是一个网络应用Debug分析器,因为它可以根据需要创建各种不同类型的网络连接。


常见使用

远程拷贝文件(类似scp)

例如将server1的 test1.sh 文件 传入到server2的 test2.sh文件(将会覆盖写入):

#先在server2用nc激活监听:
> nc -lp 1234 > test2.sh

#然后在server1上运行(这里的1表示超时时间):
> nc -w 1 supervisor01z 1234 < test1.sh


传输目录(类似scp)

例如将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();
		}
	}
}

Tags:


Share: