• 用socat转发端口

    socatSOcket CAT )是一个多用途双向套接字数据转接工具。

    socatNetCat 类似,但功能更强大,也更安全(支持 chroot )。它兼容多种协议,支持操作 文件 ( file )、 管道 ( pipe )、 设备 ( device )、 TCP 套接字、 Unix 套接字、 SOCKS 客户端、 CONNECT 代理以及 SSL 等等。

    安装

    Linux

    Linux 系统,使用包管理器进行安装,以 Debian/Ubuntu 为例:

    1
    
    apt update && apt install socat
    
    阅读全文
  • HAProxy高可用负载均衡服务器配置

    HAProxy 是一款开源负载均衡软件,同时提供 4 层( TCP )和 7 层( HTTP )代理。

    负载均衡

    由于普通机器单机处理能力以及可靠性的限制,服务需要在多台机器进行部署,形成集群。这主要出于以下两方面的考虑:

    1. 提高可靠性;
    2. 提高处理能力;

    那么,用户(或客户端)如何访问多实例服务呢?

    最简单的方案是在客户端进行重试。以 DNS 解析为例,用户可以配置多台 DNS 服务器,一台查询失败则尝试另外一台:

    阅读全文
  • rinetd端口转发工具

    进行网络编程、服务部署时,经常需要临时对一些端口进行转发。

    举个例子,笔者开发过一个 Agent 软件——它部署于集群每台服务器上,对其上的某个服务进行管理,需要连接服务端口。我在本地进行开发,需要部署一套相同的服务,这多少有些麻烦。如果可以在本地部署端口转发服务,监听服务端口,将请求转发至部署有该服务的测试机,便可完美解决问题。

    端口转发方案很多,SSH端口转发 , NAT 端口转发,甚至 HAProxy 之类的工具都可以排上用场。然而,应对开发调试这种 临时需求rinetd 就能胜任,它足够简单轻量级,依赖也少。

    请不要将 rinetd 应用到生产服务!

    rinetd 底层采用 select 而不是 epoll 实现。众所周知, select 有致命缺陷,一次能处理的 文件描述符(套接字)非常有限,效率也比较低下。

    因此,在高并发环境采用rinetd无异于自杀

    更多细节可参考文章:rinetd 在生产环境要谨慎使用

    阅读全文
  • Python使用SMTP协议发送邮件

    smtplib

    Python 标准库中,smtplib 模块提供 SMTP 协议发送接口,使用起来十分方便。先来写一个用于发送邮件的函数,一睹为快:

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    
    def send_email(host, port, user, password, fr, to, subject, body,
            smtp_cls=smtplib.SMTP_SSL):
    
        '''
            Send an email by smtp protocol
    
            Arguments
                host: email server host
                port: email server port
                user: user to login
                password: password
                fr: sender email address, the same as login user usually
                to: receiver email address
                subject: email title
                body: email content
    
            Returns
                None
        '''
    
        smtp = smtp_cls()
    
        # connect and login
        smtp.connect(host, port)
        smtp.login(user, password)
    
        # format message
        msg = u'''From: {fr}
    To: {to}
    Subject: {subject}
    Date: {date}
    
    {body}
    '''.format(
            fr=fr,
            to=to,
            subject=subject,
            date=datetime.datetime.now().strftime('%d/%m/%Y %H:%M'),
            body=body,
        )
    
        # do send
        smtp.sendmail(fr, to, msg.encode('utf8'))
        smtp.quit()
    
    阅读全文
  • 执行ab命令,对Web应用实施压力测试

    Web 应用进行压力测试,一般使用 Apache 提供的压力测试工具 ab

    ab 的功能非常强大,可以发起各种 HTTP 请求,并且支持设置 并发数 。测试完毕后,ab 还对测量数据进行统计分析,最终生成一份非常详细的测试报告。

    那么,ab 工具如何使用呢?本文将演示 ab 若干用法,以此抛砖引玉。

    安装

    Web 应用一般部署在 Linux 服务器上,因此主流 Linux 发行版软件包都提供了 Apache 工具 ab 。以 Ubuntu 为例,我们只需按照 apache2-utils 包,即可得到 ab 命令:

    1
    
    $ sudo apt install apache2-utils
    
    阅读全文
  • VRRP虚IP漂移

    简介

    VRRPVirtual Router Redundancy Protocol 的简称,即 虚拟路由冗余协议

    VRRP 最早被设计来解决网关的高可用问题:

    我们知道,计算机进行网络通讯时,需要网关来传输网络报文。每台机器只能配置一个网关地址,这时网关的可靠性就非常重要了。如果网关不幸故障了,那么使用该网关的所有机器都将受影响——断网了!

    解决网关单点问题的思路非常直观——部署一个备用网关,在主网关故障时切换过去。

    然而,由于机器只能配置一个网关地址,因此每次切换网关都需要修改该配置。 这个解决方案没能做到自动化,并不优雅。

    这时, VRRP 协议应运而生!接下来,以一个简单的例子介绍 VRRP 是如何工作的:

    阅读全文
  • Tomcat服务器配置

    安装

    先准备好 JDK 包以及 Tomcat 二进制包,下载链接如下:

    接下来,我们将 JDK 部署在 /data/jdk 目录下;将 Tomcat 部署在 /data/tomcat/clusters/default 目录下。

    Tomcat 部署目录选择支持多实例, clusters 目录下可以部署多个实例,default 是其中一个。

    接下来,我们将 JDK 包解压至选定目录:

    1
    2
    3
    4
    
    $ mkdir /data/jdk
    $ tar -C /data/jdk -xf /media/home/Downloads/jdk-10.0.1_linux-x64_bin.tar.gz
    $ ls /data/jdk/
    jdk-10.0.1
    
    阅读全文
  • 用curl命令发送HTTP请求

    curl 是一个用来发送网络请求的工具命令, 在 网络服务开发 以及 网络调试 中特别有用。 它支持的协议包括:

    • FTP
    • FTPS
    • HTTP
    • HTTPS
    • POP3
    • POP3S
    • SMTP
    • SMTPS
    • etc

    本文以 HTTP 协议为例,介绍 curl 命令的操作方式,及其在 Web 开发中的应用。

    发起请求

    给定一个 URL , curl 对其发起请求并将响应数据输出到标准输出:

    1
    2
    3
    
    $ curl www.baidu.com
    <!DOCTYPE html>
    <!--STATUS OK--><html> <head><meta http-equiv=content-type content=text/html;charset=utf-8><meta http-equiv=X-UA-Compatible content=IE=Edge><meta content=always name=referrer><link rel=stylesheet type=text/css href=http://s1.bdstatic.com/r/www/cache/bdorz/baidu.min.css><title>百度一下,你就知道</title></head> <body link=#0000cc> <div id=wrapper> <div id=head> <div class=head_wrapper> <div class=s_form> <div class=s_form_wrapper> <div id=lg> <img hidefocus=true src=//www.baidu.com/img/bd_logo1.png width=270 height=129> </div> <form id=form name=f action=//www.baidu.com/s class=fm> <input type=hidden name=bdorz_come value=1> <input type=hidden name=ie value=utf-8> <input type=hidden name=f value=8> <input type=hidden name=rsv_bp value=1> <input type=hidden name=rsv_idx value=1> <input type=hidden name=tn value=baidu><span class="bg s_ipt_wr"><input id=kw name=wd class=s_ipt value maxlength=255 autocomplete=off autofocus></span><span class="bg s_btn_wr"><input type=submit id=su value=百度一下 class="bg s_btn"></span> </form> </div> </div> <div id=u1> <a href=http://news.baidu.com name=tj_trnews class=mnav>新闻</a> <a href=http://www.hao123.com name=tj_trhao123 class=mnav>hao123</a> <a href=http://map.baidu.com name=tj_trmap class=mnav>地图</a> <a href=http://v.baidu.com name=tj_trvideo class=mnav>视频</a> <a href=http://tieba.baidu.com name=tj_trtieba class=mnav>贴吧</a> <noscript> <a href=http://www.baidu.com/bdorz/login.gif?login&amp;tpl=mn&amp;u=http%3A%2F%2Fwww.baidu.com%2f%3fbdorz_come%3d1 name=tj_login class=lb>登录</a> </noscript> <script>document.write('<a href="http://www.baidu.com/bdorz/login.gif?login&tpl=mn&u='+ encodeURIComponent(window.location.href+ (window.location.search === "" ? "?" : "&")+ "bdorz_come=1")+ '" name="tj_login" class="lb">登录</a>');</script> <a href=//www.baidu.com/more/ name=tj_briicon class=bri style="display: block;">更多产品</a> </div> </div> </div> <div id=ftCon> <div id=ftConw> <p id=lh> <a href=http://home.baidu.com>关于百度</a> <a href=http://ir.baidu.com>About Baidu</a> </p> <p id=cp>&copy;2017&nbsp;Baidu&nbsp;<a href=http://www.baidu.com/duty/>使用百度前必读</a>&nbsp; <a href=http://jianyi.baidu.com/ class=cp-feedback>意见反馈</a>&nbsp;京ICP证030173号&nbsp; <img src=//www.baidu.com/img/gs.gif> </p> </div> </div> </div> </body> </html>
    
    阅读全文
  • 用ifconfig命令设置网卡

    ifconfig 是一个用于 配置网卡 的工具命令。

    ifconfig 是一个古老的工具,现在有些过时了。更推荐使用 ip命令 ,这是网络配置工具的集大成者。

    状态查询

    ifconfig 不带任何参数即可查询当前所有已 启用up )网卡的状态:

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    
    $ ifconfig
    eth1      Link encap:Ethernet  HWaddr 08:00:27:af:9e:56
                      inet addr:192.168.56.11  Bcast:192.168.56.255  Mask:255.255.255.0
                      inet6 addr: fe80::a00:27ff:feaf:9e56/64 Scope:Link
                      UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
                      RX packets:154299 errors:0 dropped:0 overruns:0 frame:0
                      TX packets:147277 errors:0 dropped:0 overruns:0 carrier:0
                      collisions:0 txqueuelen:1000
                      RX bytes:11778201 (11.7 MB)  TX bytes:141390329 (141.3 MB)
    
    lo        Link encap:Local Loopback
                      inet addr:127.0.0.1  Mask:255.0.0.0
                      inet6 addr: ::1/128 Scope:Host
                      UP LOOPBACK RUNNING  MTU:16436  Metric:1
                      RX packets:96 errors:0 dropped:0 overruns:0 frame:0
                      TX packets:96 errors:0 dropped:0 overruns:0 carrier:0
                      collisions:0 txqueuelen:0
                      RX bytes:8692 (8.6 KB)  TX bytes:8692 (8.6 KB)
    
    阅读全文
  • SSH端口转发

    ssh 命令除了登录服务器,还可以在两台机器之间建立隧道。

    通过隧道,你可以打通一些本来不可访问的网络或者系统,让不可能成为可能。因此,完全有必要花点时间,学习如何使用 ssh 命令打洞。

    本文将介绍,如何利用 ssh 隧道进行端口转发。端口转发可分为两种:

    • 本地端口转发
    • 远程端口转发

    下文图例用颜色区分不同的服务器,称蓝色服务器为蓝服,其他以此类推。

    本地端口转发

    如上图,蓝服需要访问绿服 80 端口,但是直连不通。蓝服可以通过 22 端口登录红服,而红服可以连接到绿服。

    阅读全文