禁ping也能ping的工具:tcping

查看网络延迟标配工具:ping。但是机房服务器禁止ping的情况也很常见。这时候就用到tcping了。

tcping 是类似ping的工具,通过TCP协议工作(ping是通过icmp协议来工作的),也可以通过它来监控服务器的情况。

使用方法很简单,就是把它放在C盘windows目录下的system32文件夹下就可以使用了。

使用格式如下:

tcping www.baidu.com
tcping -t www.baidu.com         # 参数-t 一直运行ping
tcping -d -t www.baidu.com      # -d 是显示时间
tcping -d -t www.baidu.com 21   # 21是监听的端口

效果如下图:

下载链接:http://pan.baidu.com/s/1nvodysD 密码:u2c4

下载的软件包括 tcping 和 tcping64,其中 tcping64 是64位的意思。

常用的也就上面一些命令。如果你对其他的命令感兴趣,可以查看官网介绍:https://elifulkerson.com/projects/tcping.php


shadowsocks 生成二维码 URI

假设我们的配置文件如下:

{
    "server":"hostname",
    "server_port":8388,
    "local_port":1080,
    "password":"barfoo!",
    "timeout":600,
    "method":"aes-256-cfb"
}
  1. 编码前的 URI 格式:

     ss://method:password@hostname:port
    

    例如,在上边的配置文件中, URI 格式应该如下:

     ss://aes-256-cfb:barfoo!@hostname:8388
    
  2. 经过base64编码后的 URI 格式:

     ss://BASE64-ENCODED-STRING-WITHOUT-PADDING
    

最后把这个URI转成 QR 二维码。

php 代码示例如下:

public function qrUrl($host = '10.1.10.41')
{
    $uri = "aes-256-cfb:" . $this->password . "@" . $host . ":" . $this->port;
    $base64 = base64_encode($uri);
    return 'ss://' . $base64;
}

参考资料


Laravel 插件 endroid/QrCode 实现二维码

这是一个用于生成图片二维码的 Laravel 插件。Github 地址: https://github.com/endroid/QrCode

安装

$ composer require endroid/qrcode

源码示例

这个方法输出可以访问的图片http链接地址。

use Endroid\QrCode\QrCode as Qr;

public function qrGenerate(){
    $text = 'http://kelu.org';
    $size = 300;
    $padding = 8;
    $format = 'png';
    $qr = new Qr();
    $qr->setText($text);
    $qr->setSize($size)->setPadding($padding);

    $tmpFilename = tempnam(sys_get_temp_dir(), 'qrcode');
    $qr->render($tmpFilename, $format);

    $filename = 'qrs/'.$this->uuid '.' . $format;

    rename($tmpFilename,base_path('public/res/'.$filename));

    return asset($filename);
}

参考资料


Linux 删除文件后释放系统空间

又遇到了系统磁盘满的问题了。记录一下事后解决的流程。

首先进入自己认为可能出现问题的目录,使用du命令查看该目录下文件的大小(包括文件夹):

du --max-depth=1 -ah 2> /dev/null | sort -hr | head 

查出问题源后,显然就是删除 rm 了。

如果这个文件是没有进程访问的,rm 之后是会立刻释放空间的,df -h 就可以看到了。如果有进程访问该文件,那事实上系统还是认为自己没有空间。解决的办法就是 kill 掉这个进程。

所以先查看哪个进程在访问这个文件:

lsof |grep file

显示如下:

oracle    12639  oracle    5w      REG              253,0         648     215907 /home/oracle/admin/dbticb/udump/dbticb_ora_12637.trc (deleted)

kill掉进程即可:

kill -9 12639

话又说回来,这个只是事后不久,解决问题最好的办法是是事先预警,将问题扼杀在摇篮里。


Laravel 插件 mews/captcha 实现图片验证码

这是一个用于生成图片验证码的 Laravel 插件。Github 地址: https://github.com/mewebstudio/captcha 这个项目基于 Intervention Image

预览

Preview

安装

使用 Composer 安装,修改文件 composer.json 如下,然后 composer update mews/captcha

{
    "require": {
        "laravel/framework": "5.0.*",
        "mews/captcha": "~2.0"
    },
    "minimum-stability": "dev"
}

或者直接

composer require mews/captcha

Windows 需要在 php.ini 中打开 php_gd2.dll 扩展。

注册

在 provider 中注册插件:

config/app.php

    'providers' => [
        // ...
        Mews\Captcha\CaptchaServiceProvider::class,
    ]
    
    'aliases' => [
        // ...
        'Captcha' => Mews\Captcha\Facades\Captcha::class,
    ]

生成配置文件:

$ php artisan vendor:publish

然后会在config目录下生成配置文件 captcha.php

return [

    'characters' => '2346789abcdefghjmnpqrtuxyzABCDEFGHJMNPQRTUXYZ',

    'default'   => [
        'length'    => 5,
        'width'     => 120,
        'height'    => 36,
        'quality'   => 90,
    ],

    'flat'   => [
        'length'    => 6,
        'width'     => 160,
        'height'    => 46,
        'quality'   => 90,
        'lines'     => 6,
        'bgImage'   => false,
        'bgColor'   => '#ecf2f4',
        'fontColors'=> ['#2c3e50', '#c0392b', '#16a085', '#c0392b', '#8e44ad', '#303f9f', '#f57c00', '#795548'],
        'contrast'  => -5,
    ],

    'mini'   => [
        'length'    => 3,
        'width'     => 60,
        'height'    => 32,
    ],

    'inverse'   => [
        'length'    => 5,
        'width'     => 120,
        'height'    => 36,
        'quality'   => 90,
        'sensitive' => true,
        'angle'     => 12,
        'sharpen'   => 10,
        'blur'      => 2,
        'invert'    => true,
        'contrast'  => -5,
    ]

];

安装完成!

用法示例


    // [your site path]/Http/routes.php

    Route::any('captcha-test', function()
    {
        if (Request::getMethod() == 'POST')
        {
            $rules = ['captcha' => 'required|captcha'];
            $validator = Validator::make(Input::all(), $rules);
            if ($validator->fails())
            {
                echo '<p style="color: #ff0000;">Incorrect!</p>';
            }
            else
            {
                echo '<p style="color: #00ff30;">Matched :)</p>';
            }
        }
    
        $form = '<form method="post" action="captcha-test">';
        $form .= '<input type="hidden" name="_token" value="' . csrf_token() . '">';
        $form .= '<p>' . captcha_img() . '</p>';
        $form .= '<p><input type="text" name="captcha"></p>';
        $form .= '<p><button type="submit" name="check">Check</button></p>';
        $form .= '</form>';
        return $form;
    });

返回图片

captcha();
Captcha::create();

返回图片URL

captcha_src();
Captcha::src();

返回图片HTML

captcha_img();
Captcha::img();

切换配置

captcha_img('flat');
Captcha::img('inverse');

判断用户输入的验证码是否正确

扩展包使用了自定义验证规则方式扩展了验证规则,我们只要在对应的 Controller 添加以下的规则即可:

$this->validate($request, [
    'captcha' => 'required|captcha'
]);

参考资料


Debian 开启BBR TCP加速

BBR 已经出来将近半年了。 它解决问题的出发点在于:

  • 在有一定丢包率的网络链路上充分利用带宽,最大优化网络速度.。
  • 降低网络链路上的 buffer 占用率,从而降低延迟。

关于 BBR 加速原理的细节,可以参考知乎这篇文章,讲的很详细。《Linux Kernel 4.9 中的 BBR 算法与之前的 TCP 拥塞控制相比有什么优势?》

这篇文章我记录一下开启过程。事先提个醒,在生产环境中不轻易升级内核。就我实践的结果,这次升级把我的Docker搞坏了,服务无法启动。

安装

Kernel.Ubuntu.com找到版本号文件夹,amd64 的 linux-image 中含有 generic 这个 deb 包的。以我Debian 64位的系统,于是安装过程如下:

wget http://kernel.ubuntu.com/~kernel-ppa/mainline/v4.10/linux-image-4.10.0-041000-generic_4.10.0-041000.201702191831_amd64.deb
dpkg -i     dpkg -i linux-image-4.10.0-041000-generic_4.10.0-041000.201702191831_amd64.deb

安装完成后重启。

开启BBR

echo "net.core.default_qdisc=fq" >> /etc/sysctl.conf
echo "net.ipv4.tcp_congestion_control=bbr" >> /etc/sysctl.conf

sysctl -p

如果以下命令输出有bbr,那么已经成功开启BBR.

sysctl net.ipv4.tcp_available_congestion_control

如果以下命令输出有tcp-bbr,那么BBR正在运行.

lsmod | grep bbr

关闭BBR

执行完以下命令,重启后即可.

sed -i '/net\.core\.default_qdisc=fq/d' /etc/sysctl.conf
sed -i '/net\.ipv4\.tcp_congestion_control=bbr/d' /etc/sysctl.conf
sysctl -p

相关问题

如果是租用的云服务器,要注意确认系统内核是否被改过,有无影响。例如如果是linode的服务器,要注意将启动配置修改成使用grub2内核模式启动。

参考资料