使用netcat能够做什么

楔子 [admonition] 今天朋友找我解决一个问题,他的java服务在阿里服务器里监听了某端口(使用的TCP),但通过公网无法连接。我尝试在本地telnet那个端口(跨公网),不通。在他服务器里telnet 127.0.0.1 端口,是通的。说明服务正常监听了端口。但由于我不熟悉他的java服务,无法判断该java服务是否只监听了本地回环地址。 因此公网无法访问大概有两种可能,一,java服务只监听了本地回环地址; 二、防火墙限制了端口 排除第二种情况对我来说比较简单,我通过netcat在服务器监听端口,然后在本地telnet,不通!说明问题的确出在防火墙身上。该服务器为Ubuntu,使用ufw status查看防火墙状态,显示为inactive,也就是关闭状态。再查看阿里云安全组规则,已经开放了tcp/udp的所有端口(-1/-1)。后面我再次执行ufw disable,端口就通了。所以这是ufw的bug? [/admonition] 引子有点长了。主要是为了说明,如果想知道与服务器之间的tcp连接是否通,可以使用netcat工具去判断。下面介绍下netcat ~ netcat是什么 是一种计算机网络实用程序,用于使用TCP或UDP读写网络连接,号称 TCP/IP 的瑞士军刀。大家一般简写为nc。总之,涉及到网络的事儿,它几乎都能做。为什么叫瑞士军刀,因为它体积很小,不同版本的nc可执行文件只有几十k到300多k,而且大部分linux发行版都有预安装。 各种版本 netcat有许多版本,能力从弱到强为:GUN、BSD、Ncat。基础功能三者都一样,不同的是一些版本额外内置了些高级/有趣的功能(例如Ncat有个参数--chat,可以创建匿名聊天室)。 大部分centos6内置的是BSD版本的nc,我的Centos7里边内置的nc是Ncat(属于nmap工具集里边) 使用man nc,拉到最下边可以看到你的nc版本。(使用man你基本能够查阅所有的用法了,其它软件也是如此,只要是标准安装的) ps. socat号称是更为强大的nc,有兴趣的小伙伴可以自己去看看。 用途 检查端口通不通 以往我一直使用telnet来判断某个端口是否通,但telnet是基于tcp协议的,如果要判断udp端口就无能为力了。这时可以使用nc来判断。为了方便实验,本文统一使用同一台机器模拟服务端和客户端。 # 咱们使用nc创建一个tcp协议监听的端口。-l为listen,默认协议为tcp nc -l 8088 # 使用nc连上该端口。-v(verbose)用于显示更多信息,-z(zero I/O)表示不发送数据包,仅显示连接状态。 # 下面succeed表示端口是通的 nc -vz 127.0.0.1 8088 Connection to 127.0.0.1 8088 port [tcp/radan-http] succeeded! # 创建一个udp端口。-u指使用udp协议 nc -lu 8088 # 同样,加一个u表示使用udp连接该端口,同时你会看到服务端打印出若干个X。 # 不是说加了z参数就不会发数据包吗,为什么服务端收到了报文?我认为udp是无连接状态的,通过系统调用write # 往该套接字发数据,通过返回值才知道包发出去没有,从而判断udp端口是否通 nc -vzu 127.0.0.1 8088 Connection to 127.0.0.1 8088 port [udp/radan-http] succeeded! 端口扫描 # 扫描tcp端口。-w(wait)指定连接超时时间,单位秒。 # 连接成功的端口将作为标准输出 nc -v -w3 -z 127.0.0.1 1-65535 | tee succeed_port.log # 下面摘抄部分连接成功的端口 Connection to 127.0.0.1 22 port [tcp/ssh] succeeded! Connection to 127.0.0.1 25 port [tcp/smtp] succeeded! Connection to 127.0.0.1 80 port [tcp/http] succeeded! Connection to 127.0.0.1 443 port [tcp/https] succeeded! Connection to 127.0.0.1 1100 port [tcp/mctp] succeeded! Connection to 127.0.0.1 1111 port [tcp/lmsocialserver] succeeded! Connection to 127.0.0.1 2255 port [tcp/vrtp] succeeded! Connection to 127.0.0.1 3001 port [tcp/*] succeeded! Connection to 127.0.0.1 3306 port [tcp/mysql] succeeded! Connection to 127.0.0.1 4300 port [tcp/corelccam] succeeded! Connection to 127.0.0.1 4369 port [tcp/epmd] succeeded! Connection to 127.0.0.1 5672 port [tcp/amqp] succeeded! Connection to 127.0.0.1 6553 port [tcp/*] succeeded! # 扫描udp端口。nc -v -zu 127.0.0.1 1-65535 # 以下为我本地扫描结果 Connection to 127.0.0.1 636 port [udp/ldaps] succeeded! Connection to 127.0.0.1 35157 port [udp/*] succeeded! Connection to 127.0.0.1 54890 port [udp/*] succeeded! 文件传输 归根到底都是创建一个tcp/udp连接,通过连接收发数据而已。所以,无论数据是ascii字符串,二进制文件都可以发送/接收。 为了加快传输速率/加密,你甚至还可以在发送之前对数据进行压缩/加密。 对于大文件,个人认为还是scp、rsync这类专业的工具靠谱。小文件可以试试这种方法,毕竟简单,不需要ssh认证。 ...

2020-05-11 · 2 分钟 · 283 字

如何搭建个人博客

有不少朋友想要搭建个人博客,这里以我的个人网站为例说说吧。 搭建类似本站的博客,你需要以下东西:域名、空间和网页程序。 域名 zoufeng.net这个域名是在西部数码购买的。国内比较有名的是新网、西部数码等代理商,国外的是godaddy。对于E文不好的同学,这里推荐选择国内的代理商。 1.注册用户 这个就没什么好说了,到某个域名代理网站按说明注册用户就好。 2.选择并购买域名 输入你喜欢的域名,点击查询。如下图,你就可以看到哪些域名你可以注册。对于建站来说,域名是挺便宜的,现在.com等主流域名首年只需要40+块,续费的话也不过是90+元/年。 点击注册按钮后,会填写域名注册的相关资料,按你的实际情况填写就可以。 3.域名解析。 购买成功后,打开你的管理中心,选择域名管理,会在列表里看到你的域名。 下图可以看到我有两个已经解析的记录。分别是一级域名(这里用@表示)和二级域名www。两个都作A记录指向我的主机IP,关于主机,下文会提及。你还可以添加多条记录,解析类型一般是A记录和CNAME(别名)记录。我买的主机是有提供IP的,所以我选择A记录就行,但有些主机商提供给你的是一个二级或三级域名,此时就需要你选择CNAME记录了。 至此,你就完成了域名解析,只要DNS服务器更新后(几分钟-几小时不等),你就可以用域名访问你的网站了。怎么知道是否解析成功呢?打开CMD,用ping命令。下图看到已经可以解析为指定的IP了。 空间 1.购买空间 空间用来存放网站程序。你可选择虚拟主机、VPS或者云服务器。发表本文章时,本站是挂在美国VPS里的。现已挂在国内主机。 三种空间各有优势,本文就不分析了。对于网络上免费的空间(像主机屋啥的),这里不推荐大家使用,除非你是用于普通学习,没打算保存数据。 阿里之前是有ACE云引擎(可以看做空间)免费体验的,现在免费账号貌似不提供了。 2015年4月阿里ACE已实现按量付费,这意味着你可以购买使用了。 如果你和我一样没什么钱,建议买一个便宜VPS。关于我的VPS,可以参看这篇文章 /posts/move-to-vps/。 2.绑定域名(搭建好LAMP环境后操作) 还记得刚刚将域名解析为主机IP了吗?那只是做了将域名解析为IP的部分,当我在浏览器输入域名或IP的时候,谁来做出响应呢?此时就需要在主机绑定域名了。 如果你购买的是虚拟主机或云服务器,你可以在你购买的网站打开管理主机或服务器的面板,将域名绑定。 如果你买的是VPS,假设你安装的是Linux,那么你需要在你的web服务器配置文件(例如Apache的httpd.conf文件)配置绑定你的域名。 安装网页程序 目前主流的个人博客程序是用PHP写的WordPress。当然如果你喜欢折腾,自己写一个只属于你自己的博客也未尝不可。 1.配置环境 安装此程序前,如果你买的是VPS,需要先搭建好LAMP环境,请参考这篇文章 /posts/lnmp-lamp-lnmpa-install-by-one-press/ 虚拟主机不需要配置环境,提供商已经配置好了。 2.下载WP 首先到官网下载最新版本的WordPress,下载后是一个压缩包。 3.将WP文件上传到主机 如果你的是虚拟主机且不支持解压操作,那么你先在本地解压。再利用FTP上传工具上传到主机。VPS的话,为了提高上传效率,直接将zip包通过FTP上传到指定目录,然后用unzip命令解压就可以。FTP工具,这里推荐使用FileZilla.

2015-05-06 · 1 分钟 · 35 字

lnmp、lamp、lnmpa一键安装包

最近在DO买了个VPS。这个安装包不错,不需要重复造轮子,可以专心做自己的事了。 注:本文转自Linux运维笔记 这个脚本是使用shell编写,为了快速在生产环境上部署LNMP/LAMP/LANMP(Linux、Nginx/Tengine、MySQL /MariaDB/Percona、PHP),适用于CentOS/Redhat 5+、Debain 6+和Ubuntu 12+ 脚本特性: 持续不断更新 源码编译安装,大多数源码是最新stable版,并从官方网址下载 一些安全优化 提供多个数据库版本(MySQL-5.6, MySQL-5.5, MariaDB-10.0, MariaDB-5.5, Percona-5.6, Percona-5.5) 提供多个PHP版本(php-5.3, php-5.4, php-5.5,php-5.6,php-7/phpng(alpha)) 提供Nginx、Tengine 提供多个Apache版本(Apache-2.4,Apache-2.2) 根据自己需求安装PHP缓存加速器,提供ZendOPcache、xcache、apcu、eAccelerator、ionCube和ZendGuardLoader(php-5.4、php-5.3 PHP源码加密) 根据自己需求安装Pureftpd、phpMyAdmin 根据自己需求安装memcached、redis 根据自己需求可使用tcmalloc或者jemalloc优化MySQL、Nginx 提供添加虚拟主机脚本 提供Nginx/Tengine、PHP、Redis、phpMyAdmin升级脚本 提供本地备份和远程备份(服务器之间rsync)脚本 提供CentOS 6/7下HHVM安装**#news** Github地址:https://github.com/lj2007331/lnmp LNMP问题反馈论坛:http://bbs.linuxeye.com LNMP最新源码一键安装脚本问题反馈请加QQ群: 235258658 安装步骤: yum -y install wget screen #for CentOS/Redhat #apt-get -y install wget screen # for Debian/Ubuntu wget http://linuxeye.oss-cn-hangzhou-internal.aliyuncs.com/lnmp/lnmp-full.tar.gz #阿里云内网下载地址(包含源码) wget http://mirrors.linuxeye.com/lnmp-full.tar.gz # 国内下载地址(包含源码) wget http://downloads.linuxeye.com/lnmp-full.tar.gz # 美国下载地址(包含源码) wget http://downloads.linuxeye.com/lnmp.tar.gz # 仅脚本源码,建议国外主机下载此包,源码包从官方站点下载 tar xzf lnmp-full.tar.gz #tar xzf lnmp.tar.gz cd lnmp # 如果需要修改目录(安装、数据存储、Nginx日志),请修改options.conf文件 screen -S lnmp # 如果网路出现中断,可以执行命令`screen -r lnmp`重新连接安装窗口 ./install.sh # 请勿sh install.sh或者bash install.sh这样执行 添加虚拟主机**:** ...

2015-03-21 · 1 分钟 · 181 字