在 Cygwin 下编译 netcat_1.10-38

我在《Linux下用nc实现
DuplexPipe

》中提到,Win 版的 netcat 无法实现 DuplexPipe 的功能。

其实 Cygwin 版的 netcat 也是如此。Cygwin 用的是 netcat 原生的 1.10 版本(项目地址是:
http://nc110.sourceforge.net/),该版本没提供 -c 选项。因为我最近在做的项目需要一个这样的工具来帮助测
试,于是就决定自己编译 1.10-38 版的 nc。

编译

首先到 debian 下 netcat 的主页下载源代码(http://packages.qa.debian.org/n/netcat.html),测试版已
经到 1.10-39 版本了,我选择稳定版 v1.10-38(http://packages.debian.org/source/stable/netcat)。需要下
载两个文件:其中 netcat_1.10.orig.ta
r.gz

是原生的 nc;netcat_1.10-38.diff.gz

是升级包。

下载完成后先解压:

$ ls
netcat_1.10-38.diff.gz*  netcat_1.10.orig.tar.gz*
$ tar xvf netcat_1.10.orig.tar.gz
...
$ ls
netcat-1.10.orig/  netcat_1.10-38.diff.gz*  netcat_1.10.orig.tar.gz*

接着是释放补丁

$ cd netcat-1.10.orig
$ ls
Changelog  README  generic.h     netcat.c  stupidh*
Makefile   data/   netcat.blurb  scripts/
$ zcat ../netcat_1.10-38.diff.gz | patch -p1
$ ls
Changelog  README  debian/    nc.1          netcat.c  stupidh*
Makefile   data/   generic.h  netcat.blurb  scripts/

补丁被释放到 debian 目录下。然后就是给源代码打补丁了。

$ sed 's#^#patch -Np1 -i debian/patches/#' debian/patches/series | sh
patching file Makefile
patching file netcat.c
patching file netcat.c
patching file netcat.c
patching file netcat.c
patching file netcat.c
patching file netcat.c
patching file netcat.c
patching file netcat.c
patching file netcat.c
patching file netcat.c
patching file netcat.c
patching file debian/nc.1
patching file netcat.c
patching file debian/nc.1
patching file netcat.c
patching file debian/nc.1
patching file data/rservice.c
patching file netcat.c
patching file netcat.c
patching file netcat.c
patching file netcat.c
patching file netcat.c
patching file scripts/webproxy
$

最后,为了能使用 -c 和 -e 选项,还要再修改一下 Makefile 文件。将 Makefile 的第 11 行“# DFLAGS = -
DTEST -DDEBUG”替换成“DFLAGS = -DDEBIAN_VERSION='"1.10-38"' -DGAPING_SECURITY_HOLE -DIP_TOS -DTELNET”
,保存退出。这样,就可以运行“make nc”来编译了。

安装

编译完成后会在当前目录下生成一个“nc.exe”。将它拷贝到“/bin”目录下,并将“nc.1”复制到
“/usr/share/man/man1”目录里。这样就安装完成了。你可以试试运行“nc -h”看看版本号是否正确。

$ nc -h
[v1.10-38]
connect to somewhere:   nc [-options] hostname port[s] [ports] ...
listen for inbound:     nc -l -p port [-options] [hostname] [port]
options:
        -c shell commands       as `-e'; use /bin/sh to exec [dangerous!!]
        -e filename             program to exec after connect [dangerous!!]
        -b                      allow broadcasts
        -g gateway              source-routing hop point[s], up to 8
        -G num                  source-routing pointer: 4, 8, 12, ...
        -h                      this cruft
        -i secs                 delay interval for lines sent, ports scanned
        -k                      set keepalive option on socket
        -l                      listen mode, for inbound connects
        -n                      numeric-only IP addresses, no DNS
        -o file                 hex dump of traffic
        -p port                 local port number
        -r                      randomize local and remote ports
        -q secs                 quit after EOF on stdin and delay of secs
        -s addr                 local source address
        -T tos                  set Type Of Service
        -t                      answer TELNET negotiation
        -u                      UDP mode
        -v                      verbose [use twice to be more verbose]
        -w secs                 timeout for connects and final net reads
        -z                      zero-I/O mode [used for scanning]
port numbers can be individual or ranges: lo-hi [inclusive];
hyphens in port names must be backslash escaped (e.g. 'ftp/-data').

模拟 WireShark

在项目中,我们有时会需要截获客户端和服务端之间发送的消息。WireShark 可以监听本地的通信,可是我觉得它操作比较麻烦。现在,有了 1.10-38 版的 nc,就可以很简单地实现这个功能!

$ nc -l -p 1234 -c 'tee 1234.txt | nc remotehost 1235 | tee 1235.txt'

执行了上面的命令后,再用客户端连接本地的 1234 端口,nc 就会自动去连接远程的 1235 端口。并且客户端发送的消息会保留一份副本到 1234.txt 文件中;服务器反馈的信息则会保存到 1235.txt 中。


版权声明

为方便其他朋友提问和指正,转载时请保持文章完整性,并以超链接形式注明原始作者“redraiment

”和主站点

地址,谢谢。

联系方式

我的邮箱,欢迎来信(redraiment@gmail.com

我的Blogger(子清行

):http://redraiment.blogspot.com/

我的Google Sites(子清行

):https://sites.google.com/site/redraiment

我的CSDN博客(梦婷轩

):http://blog.csdn.net/redraiment

我的百度空间(梦婷轩

):http://hi.baidu.com/redraiment

时间: 2024-12-27 22:40:46

在 Cygwin 下编译 netcat_1.10-38的相关文章

《C程序设计新思维》一1.2 在Windows下编译C

1.2 在Windows下编译C 在多数系统中,C享有一个中心的.贵宾礼遇的地位,以至于所有其他工具都处于从属的地位:但是在Windows机器中,C语言却被奇怪地忽略了. 所以我不得不花点时间讨论如何来准备好一台Windows机器以便用来写C程序.如果你现在不需要在Windows机器上编程,你可以直接跳到"1.3库的路径". 这并非是针对Microsoft的,请不要用这样的角度来理解这一节.我无意去推测Microsoft的动机和商业战略.不过,如果你想在Windows机器上用C来工作,

ubuntu 11.10(32位系统)下编译android源码 make错误解决办法

本文介绍在ubuntu 11.10系统下编译android 2.3.3源码,编译之前请确定上两篇文章(http://www.cnblogs.com/dwayne/archive/2011/11/16/2250732.html和http://www.cnblogs.com/dwayne/archive/2011/11/11/2245383.html)中所需的准备工作已经成功完成.编译完成生成系统镜像文件,并在模拟器中运行. 准备工作完成后,开始编译工作.下载下来的源码有5G多,如果按照我之前写的获

CentOS 7.2 下编译安装PHP7.0.10+MySQL5.7.14+Nginx1.10.1的方法详解(mini版本)_php实例

一.安装前的准备工作 1.yum update #更新系统 2.yum install gcc gcc-c++ autoconf automake cmake bison m4 libxml2 libxml2-devel libcurl-devel libjpeg-devel libpng-devel libicu-devel #安装php.MySQL.Nngix所依赖的包 3.下载以下包 #我把所有源文件都下载在root目录,读者可自行修改源文件存放目录 3.1 libmcrypt-2.5.8

编译android源码-Mac OS X Yosemite10.10.1下编译android 源码问题

问题描述 Mac OS X Yosemite10.10.1下编译android 源码问题 选择编译目标时执行以下命令: $lunch full-eng 报错 Cannot find SDK 10.7 at /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.7.sdk 源码下载以及编译参考文章:Mac OS X 10.8.4下Android4.2.2源码下载与编译

CentOS 7.2 下编译安装PHP7.0.10+MySQL5.7.14+Nginx1.10.1的方法详解(mini版本)

一.安装前的准备工作 1.yum update #更新系统 2.yum install gcc gcc-c++ autoconf automake cmake bison m4 libxml2 libxml2-devel libcurl-devel libjpeg-devel libpng-devel libicu-devel #安装php.MySQL.Nngix所依赖的包 3.下载以下包 #我把所有源文件都下载在root目录,读者可自行修改源文件存放目录 3.1 libmcrypt-2.5.8

ubuntu 11.10(32位系统)下编译android源码

本文介绍在ubuntu 11.10系统下编译android 2.3.3源码,编译之前请确定上两篇文章(http://www.cnblogs.com/dwayne/archive/2011/11/16/2250732.html和http://www.cnblogs.com/dwayne/archive/2011/11/11/2245383.html)中所需的准备工作已经成功完成.编译完成生成系统镜像文件,并在模拟器中运行. 准备工作完成后,开始编译工作.下载下来的源码有5G多,如果按照我之前写的获

linux下mysql 5.5.38 源码安装笔记

接上一篇<linux下mysql 5.1.73 源码安装笔记>,继续安装一个mysql 5.5.38 版.同样使用源码安装.并且实现两个实例同时运行,互不冲突. 这篇笔记记录的简单些,省略一些和上篇笔记相同的步骤. 第一步,下载: mysql 5.5.38官方下载地址: http://dev.mysql.com/get/Downloads/MySQL-5.5/mysql-5.5.38.tar.gz df5071c49764c3ad65df04ff20866a86 解压的步骤就不重复了. 第二步

skia 编译-windows下编译skia图形库出错

问题描述 windows下编译skia图形库出错 首先用在window下安装了cygwin 并且安装了python 用winch python测试python是否成功 也ok了,然后安装了vs2010, 在cygwin中输入指令 Python gyp_skia 报错 $ Python gyp_skia Traceback (most recent call last): File "gyp_skia", line 29, in import gyp ImportError: No mo

在Windows环境下编译MySQL代码

写这篇文章的目的只是告诉朋友们如何编译MySQL代码,或许有些人觉得从Windows平台编译MySQL的代 码有些复杂,其实不然.如果您对本文中所提到的知识有任何疑问可以透过CSDN的MySQL板或者 MySQL@CHINA支援论坛寻求帮助.这篇文章中所提到的东西没有任何的创新性,只是对MySQL已有文档的总 结. 一.为什么要编译代码 我不知道阅读这篇文章的朋友你是否会注意MySQL手册.MySQL在线手册近期呈现一种"超越"趋势, 手册中所描述的内容很大部分都是开发版本中才能找到的