scapy安装说明

scapy是一款不错的网络测试工具,python3下安装步骤:

apt-get update
apt-get install python3-pip
pip3 install scapy-python3

Redis代理服务器twemproxy安装说明

twemproxy是一个twitter开源的一个redis和memcache代理服务器。也叫nutcracker

源码:https://github.com/twitter/twemproxy

1.安装过程:

apt-get update
apt-get install autoconf automake libtool
wget https://github.com/twitter/twemproxy/archive/v0.4.1.zip
unzip v0.4.1.zip
cd twemproxy-0.4.1/
chmod 777 ./travis.sh
./travis.sh

查看帮助:

$ nutcracker --help
This is nutcracker-0.4.1

Usage: nutcracker [-?hVdDt] [-v verbosity level] [-o output file]
                  [-c conf file] [-s stats port] [-a stats addr]
                  [-i stats interval] [-p pid file] [-m mbuf size]

Options:
  -h, --help             : this help
  -V, --version          : show version and exit
  -t, --test-conf        : test configuration for syntax errors and exit
  -d, --daemonize        : run as a daemon
  -D, --describe-stats   : print stats description and exit
  -v, --verbose=N        : set logging level (default: 5, min: 0, max: 11)
  -o, --output=S         : set logging file (default: stderr)
  -c, --conf-file=S      : set configuration file (default: conf/nutcracker.yml)
  -s, --stats-port=N     : set stats monitoring port (default: 22222)
  -a, --stats-addr=S     : set stats monitoring ip (default: 0.0.0.0)
  -i, --stats-interval=N : set stats aggregation interval in msec (default: 30000 msec)
  -p, --pid-file=S       : set pid file (default: off)
  -m, --mbuf-size=N      : set size of mbuf chunk in bytes (default: 16384 bytes)

2.配置文件:

vim conf/nutcracker.yml

alpha:
  listen: 0.0.0.0:27017
  hash: fnv1a_64
  distribution: ketama
  auto_eject_hosts: true
  redis: true
  server_retry_timeout: 2000
  server_failure_limit: 1
  redis_auth: 5cKBak4iBLY1
  servers:
   - 10.10.11.31:6379:1

redis_auth为后端redis的认证密钥

listen: 0.0.0.0:27017 监听本地所有的27017端口

3.在当前目录下启动:

nutcracker -d -c conf/nutcracker.yml

4.客户端连接测试:

redis-cli -p 27017 -a 5cKBak4iBLY1
127.0.0.1:27017> set a abl
OK
127.0.0.1:27017> get a
"abl"

注意:

对于redis的系统命令是不支持的,也就导致了有些客户端工具连接不上。

httpie使用笔记

安装:

MAC OS X 可通过brew一键安装:

$ brew install httpie

大多数的Linux发行版都提供了一个包,可以通过系统包管理器来安装:

基于Debian的发行版比如Ubuntu可以通过下面的方法安装:

apt-get install httpie

基于RPM包的安装方式:

yum install httpie

Windows、MAC、Linux的通用安装方式是通过pip来安装:

pip install --upgrade pip setuptools
pip install --upgrade httpie

最新的开发版可从GitHub获取到:

Mac OS X 系统通过brew安装

brew install httpie --HEAD

通用安装

pip install --upgrade https://github.com/jkbrzt/httpie/tarball/master

使用:

比如查看elasticsearch版本信息:

http http://1.1.1.1:9200/ -a username:password --body

更多使用说明查考官方文档:https://httpie.org/docs

composer使用笔记

安装:

windows下安装

下载:https://getcomposer.org/Composer-Setup.exe

直接执行安装,它会查找系统环境变量php所在位置,然后自动安装。

Linux下安装

curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer

Docker方式执行

官方仓库:https://hub.docker.com/_/composer

docker pull composer
docker run --rm --interactive --tty --volume $PWD:/app composer create-project flarum/flarum .

# 加上代理(若SSL失败可以重试几次)
docker run --rm --interactive --tty -e HTTP_PROXY=http://192.168.50.1:50001 -e HTTPS_PROXY=http://192.168.50.1:50001 --volume $PWD:/app composer create-project flarum/flarum .

flarum论坛

安装中文包

composer require flarum-lang/chinese-simplified

单点登录

composer require maicol07/flarum-ext-sso

上传文件

composer require fof/upload

图链接自动显示

composer require fof/formatting

header上的导航栏

composer require fof/links

二次开发

https://mithril.js.org/

https://docs.flarum.org/zh/extend/frontend

# cd into your flarum folder
mkdir packages & cd packages
npx @friendsofflarum/create-flarum-extension web3address
cd packages/web3address
cd js
yarn && yarn dev

https://juejin.cn/post/7111517181460480014 https://www.sitepoint.com/writing-a-flarum-extension-building-a-custom-field/

使用

1.在项目目录下新建composer.json文件:

{
    "require": {
        "elasticsearch/elasticsearch": "~1.0"
    }
}

2.命令行进入该目录执行:

composer update

composer 常用命令

composer list  显示所有命令

composer show  显示所有包信息

composer install  在 composer.json 配置中添加依赖库之后运行此命令安装

composer install --ignore-platform-req=ext-redis --ignore-platform-req=ext-mongodb  # 安装时排除指定扩展,缺扩展时防止安装报错

composer create-project laravel/laravel Laravel –prefer-dist "5.1.*"  创建项目

composer search packagename  搜索包

composer update  更新所有包

composer update elasticsearch/elasticsearch  更新指定包(通过修改composer.json文件中的版本号,再用该条命令可升级对应包的版本)

composer remove elasticsearch/elasticsearch  移除指定的包

composer require elasticsearch/elasticsearch  添加指定包

composer require elasticsearch/elasticsearch:1.19  添加指定包和版本

composer require elasticsearch/elasticsearch=1.19

composer require elasticsearch/elasticsearch 1.19

所有支持的命令

  about    显示关于composer的简短信息。
  archive  创建这个作曲家软件包的存档。
  browse   在浏览器中打开软件包的存储库 URL 或主页。
  cc       清除composer的内部软件包缓存。
  check-platform-reqs 检查是否满足平台要求。
  clear-cache  清除作曲家的内部软件包缓存。
  clearcache   清除作曲家的内部软件包缓存。
  config   设置配置选项。
  create-project      从包中创建新的项目到给定的目录中。
  depends  显示哪些包会导致给定包被安装。
  diagnose 诊断系统以识别常见错误。
  dump-autoload 转储自动加载器。
  dumpautoload 转储自动加载器。
  exec     执行销售的二进制文件/脚本。
  fund     了解如何为维护你的依赖关系提供资金。
  global   允许在全局作曲家目录($COMPOSER_HOME)中运行命令。
  help     显示命令的帮助。
  home     在浏览器中打开软件包的仓库 URL 或主页。
  i        从 composer.lock 文件中安装项目依赖关系(如果存在),或者使用 composer.json。
  info     显示软件包的信息。
  init     在当前目录下创建一个基本的 composer.json 文件。
  install  如果存在的话,从 composer.lock 文件中安装项目依赖关系,或者回到 composer.json。
  licenses 显示依赖项的许可证信息。
  list     列出命令
  outdated 显示有更新的已安装软件包的列表,包括其最新版本。
  prohibits 显示哪些软件包无法安装。
  remove   从 require 或 require-dev 中移除一个包。
  require  将所需的包添加到 composer.json 中并安装它们。
  run      运行 composer.json 中定义的脚本。
  run-script 运行 composer.json 中定义的脚本。
  search   搜索软件包。
  self-update 将 composer.phar 更新为最新版本。
  selfupdate  将 composer.phar 更新到最新版本。
  show     显示软件包的信息。
  status   显示本地修改的软件包列表。
  suggests 显示软件包的建议。
  u        根据 composer.json 将你的依赖项升级到最新版本,并更新 composer.lock 文件。
  update   根据 composer.json 将你的依赖项升级到最新版本,并更新 composer.lock 文件。
  upgrade  根据 composer.json 将你的依赖项升级到最新版本,并更新 composer.lock 文件。
  validate 验证 composer.json 和 composer.lock。
  why      显示哪些包导致给定包被安装。
  why-not  显示哪些包会阻止给定包的安装。

使用国内源,加快更新速度

1.修改 composer 的全局配置文件(推荐方式)

打开命令行窗口(windows用户)或控制台(Linux、Mac 用户)并执行如下命令:

composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/
  • 阿里云镜像源 https://mirrors.aliyun.com/composer/

  • 华为云 https://mirrors.huaweicloud.com/repository/php/

  • 腾讯云 https://mirrors.cloud.tencent.com/composer/

  • 上海交通大学 https://packagist.mirrors.sjtug.sjtu.edu.cn/

恢复到官方源:

composer config -g repo.packagist composer https://packagist.org

2.修改当前项目的 composer.json 配置文件:

打开命令行窗口(windows用户)或控制台(Linux、Mac 用户),进入你的项目的根目录(也就是 composer.json 文件所在目录),执行如下命令:

composer config repo.packagist composer https://packagist.phpcomposer.com

上述命令将会在当前项目中的 composer.json 文件的末尾自动添加镜像的配置信息(你也可以自己手工添加):

"repositories": {
    "packagist": {
        "type": "composer",
        "url": "https://packagist.phpcomposer.com"
    }
}

更新composer自身

composer selfupdate

查看composer版本:

composer --version

回滚版本:

composer self-update --rollback

中文文档:http://www.phpcomposer.com/

显式设置目标 PHP 版本来解决升级模块提示PHP版本不一致问题

composer.json文件中添加config

{
    "require": {
        "mongodb/mongodb": "^1.8"
    },
    "config": {
        "platform": {
            "php": "7.1.0"
        }
    }
}

发布包

发布包注意事项

1.src目录下的文件名和类名保持一致。

2.提交到git后,要创建一个release Tags标签,比如 v1.7,再去Packagist手动update。

3.在Packagist提交发布地址的时候,填入的是GitHub的地址,注意不是.git结尾的这种(否则会报CSRF错误)。

4.发布完包后Packagist的国内索引需要一定时间才能更新,所以不能马上通过composer require更新包。(可以通过切换到官方源,并清除本地缓存 composer clearcache 来处理)

5.如果跨越大版本号更新,require是无法满足的。(可以先remove再require)

6.命名空间和包名是区分大小写的。

7.注意composer.json文件里autoload psr-4 命名空间前缀必须以\\结尾,而且这里的命名空间要与类中namespace对应。否则class_exists()也找不到类的。

8.composer.json里的项目名称必须全部小写。

apache2日常笔记

.htaccess

反向代理

依赖模块:

LoadModule proxy_module modules/mod_proxy.so LoadModule proxy_http_module modules/mod_proxy_http.so

<IfModule mod_rewrite.c>
	RewriteEngine On
	RewriteRule ^(.*)$ http://malu.me/$1 [P]
</IfModule>

给特定文件后缀添加header头

<FilesMatch ".json" >
	Header set Access-Control-Allow-Origin: "*"
</FilesMatch>

禁止用户访问特定文件

<Files config.json>
	order allow,deny
	deny from all 
</Files>

禁止访问特定后缀-正则匹配

<FilesMatch "\.(sql|py|db|sh)$">
	order allow,deny
	deny from all
</FilesMatch>

静态项目重写

<IfModule mod_rewrite.c>
	RewriteEngine on
	RewriteCond %{REQUEST_FILENAME} !-d
	RewriteCond %{REQUEST_FILENAME} !-f
	RewriteRule ^(.*)$ /index.html [L]
</IfModule>

动态项目重写

<IfModule mod_rewrite.c>
	RewriteEngine on
	RewriteCond %{REQUEST_FILENAME} !-d
	RewriteCond %{REQUEST_FILENAME} !-f
	RewriteRule ^(.*)$ index.php/$1 [L]
</IfModule>

设置.htaccess后出现页面500错误

查看apache2的错误日志出现:.htaccess: order not allowed here

解决办法:

在apache的配置文件中修改AllowOverride的属性为all:

AllowOverride All

表示允许用户自定义.htaccess文件。

升级apache2

系统环境:Ubuntu 14.04、apache2

apache 2.4.9以后php-fpm协同apache一起工作所需要的配置没有以前那么复杂了,所以有必要升级一下。

查看apache版本

apachectl -v

1.添加并更新源

LC_ALL=en_US.UTF-8 add-apt-repository ppa:ondrej/apache2
apt-get update

注意,命令前加了 LC_ALL=en_US.UTF-8,为了防止添加期间编码报错问题!

如果还是出现编码问题则:

locale-gen en_US en_US.UTF-8
dpkg-reconfigure locales
export LANG=en_US.UTF-8
export LANGUAGE=en_US.UTF-8

注:

locale    # 查看当前编码环境

locale -a  # 查看所有支持的语言环境

如果add-apt-repository在您的VPS中不可用,请安装它。

apt-get install software-properties-common

或者,在较旧的Ubuntu版本上:

apt-get install python-software-properties

2.安装

安装前您可以通过以下方式查看存储库中的可用版本:

$ apt-cache policy apache2
apache2:
  Installed: 2.4.7-1ubuntu4.18
  Candidate: 2.4.33-1+ubuntu14.04.1+deb.sury.org+1
  Version table:
     2.4.33-1+ubuntu14.04.1+deb.sury.org+1 0
        500 http://ppa.launchpad.net/ondrej/apache2/ubuntu/ trusty/main amd64 Packages
 *** 2.4.7-1ubuntu4.18 0
        500 http://mirrors.aliyun.com/ubuntu/ trusty-updates/main amd64 Packages
        500 http://mirrors.aliyun.com/ubuntu/ trusty-security/main amd64 Packages
        100 /var/lib/dpkg/status
     2.4.7-1ubuntu4 0
        500 http://mirrors.aliyun.com/ubuntu/ trusty/main amd64 Packages

开始安装吧:

apt install apache2

系统会自动更新至最新版本 2.4.33

安装模块

安装mod_qos模块

apt-get install libapache2-mod-qos

安装模块后, 它将自动注册并启用自身。

配置文件路径:

/etc/apache2/mods-enabled/qos.conf

重启apache2

service apache2 restart

重新加载apache2的配置文件

apachectl graceful

使用a2enmod开启模块:

a2enmod qos

缓慢的http拒绝服务攻击处理

使用mod_reqtimeout和mod_qos两个模块相互配合来防护。

1、mod_reqtimeout用于控制每个连接上请求发送的速率。配置例如:

#请求头部分,设置超时时间初始为10秒,并在收到客户端发送的数据后,每接收到500字节数据就将超时时间延长1秒,但最长不超过40秒。可以防护slowloris型的慢速攻击。

RequestReadTimeout header=10-40,minrate=500

#请求正文部分,设置超时时间初始为10秒,并在收到客户端发送的数据后,每接收到500字节数据就将超时时间延长1秒,但最长不超过40秒。可以防护slow message body型的慢速攻击。

RequestReadTimeout body=10-40,minrate=500

需注意,对于HTTPS站点,需要把初始超时时间上调,比如调整到20秒。

2、mod_qos用于控制并发连接数。配置例如:

当服务器并发连接数超过600时,关闭keepalive

QS_SrvMaxConnClose 600

限制每个源IP最大并发连接数为50

QS_SrvMaxConnPerIP 50

这两个数值可以根据服务器的性能调整。

配置缓存

1.进入apache模块目录:

cd /etc/apache2/mods-enabled

2.给expires、headers两个模块建立软链:

ln -s ../mods-available/expires.load
ln -s ../mods-available/headers.load

3.建立配置文件、以及软链:

ln -s ../mods-available/expires.conf
ln -s ../mods-available/headers.conf

或者使用a2enmod开启模块:

a2enmod expires
a2enmod headers

4.编辑配置文件:

cat ../mods-available/expires.conf

<IfModule mod_expires.c>
ExpiresActive On  
ExpiresByType text/html "now plus 1 day"  
ExpiresByType text/css "now plus 1 month"  
ExpiresByType application/x-javascript "now plus 5 day"  
ExpiresByType image/jpeg "access plus 1 month"  
ExpiresByType image/gif "access plus 1 month"  
ExpiresByType image/bmp "access plus 1 month"  
ExpiresByType image/x-icon "access plus 1 month"  
ExpiresByType image/png "access plus 1 month"  
ExpiresByType application/x-shockwave-flash "access plus 1 month"  
</IfModule>

cat ../mods-available/headers.conf

<IFModule mod_headers.c>
Header add Pragma "cache"
</IFModule>

5.重启apache2:

/etc/init.d/apache2 restart

内存优化

利用mpm_prefork模块调整内存占用:

apt-get install apache2-mpm-prefork

比如需要对低内存设备优化:

1.修改:/etc/apache2/mods-enabled/mpm_prefork.conf

<IfModule mpm_prefork_module>
       StartServers              1
       MinSpareServers           1
       MaxSpareServers           10
       MaxRequestWorkers         150
       MaxConnectionsPerChild    2
</IfModule>

StartServers 启动时建立的子进程数量

MinSpareservers和MaxSpareServers分别设置空闲子进程的最小和最大数量

MaxConnectionsPerChild 子进程最大连接数 (超过了释放内存)

2.修改:/etc/apache2/apache2.conf

KeepAlive off

KeepAlive 配置的含义:

对于HTTP/1.1的客户端来说,将会尽量的保持客户的HTTP连接,通过一个连接传送多份HTTP请求响应。

这样对于客户端来说,可以提高50%左右的响应时间,而于服务器端来说则降低了更多个连接的开销。

不过这个依赖于客户端是否想保持连接。IE默认是保持连接的,当你打开100个图片的网站时,IE有可能只打开2个连接,通过这两个连接传送数据,而不是开100个连接。

在 Apache 服务器中,KeepAlive 是一个布尔值,On 代表打开,Off 代表关闭,这个指令在其他众多的 HTTPD 服务器中都是存在的。

KeepAliveTimeout 为持久连接保持的时间,也就是说,在这此连接结束后开始计时,多长时间内没有重新发送HTTP请求,就断掉连接。默认设置为5秒,这个值可以大点,但不能太大,否则会出现同时等候过多连接,导致多的内存被占用。

解决403错误

一般是权限不够导致,尝试在<Directory /**>目录下添加

Require all granted

wol网络唤醒

首先网络唤醒需要硬件支持,目前大部分主流的板载网卡都支持,只需在bios里开启即可,笔记本中thinkpad全系列都支持,部分品牌的部分型号是不支持的,比如我有2台acer笔记本不支持。(很多时候wol是为了节电考虑,但是电源插座是必须通电的,笔记本也是)

路由器下安装

路由器中有相关插件可以直接进行唤醒,比如OpenWRT提供了wol和etherwake两个包来实现WOL功能

opkg update
opkg install wol etherwake

使用方法:

/usr/bin/wol 00:1D:5C:1F:5D:16
/usr/bin/etherwake 00:1D:5C:1F:5D:16

ubuntu下安装:

apt-get install wakeonlan

使用方法:

wakeonlan 00:1D:5C:1F:5D:16

windows下安装:

下载地址:https://www.depicus.com/downloads/wolcmd.zip

使用方法:

打开cmd,CD到下载wolcmd的文件路径

wolcmd [mac address] [ip address] [subnet mask] [port number]

比如:

WolCmd.exe 1016932061F0 192.168.0.255 255.255.255.0 80

公网唤醒内网主机

外网进行唤醒,前提是路由器上得设置端口映射,和mac绑定。

原理是这样的:

1.魔术包数据发送到外网地址的映射端口上。

2.由于做了映射,路由器会找到对应的IP地址。

3.IP与对应的mac地址绑定了,所以路由器自然得将数据包发到对应mac地址上。

4.此时数据包已经发到内网待唤醒主机上了,网卡判断数据帧符合唤醒内容,就把机器启动。

公网唤醒工具:http://ip.malu.me/wol/

附录

断电后再通电自动唤醒:在BIOS中电源设置,Restore on AC设置为Last Stste。

syncy百度云同步

用syncy实现百度云同步,能提供低成本的异地备份需求。

项目地址:https://github.com/wishinlife/SyncY

安装:

Ubuntu下使用我们只需要python版本即可:

#首先安装依赖包
pip install pycurl
pip install pycrypto #如果不使用加密可以不用装

#下载源码
git clone https://github.com/wishinlife/SyncY.git

#设置配置文件
cp SyncY/syncy /etc/config/syncy

配置文件:vim /etc/config/syncy

config syncy
        option syncylog ''
        option blocksize '10'
        option ondup 'rename'
        option datacache 'on'
        option excludefiles '*/Thumbs.db'
        option listnumber '100'
        option retrytimes '3'
        option retrydelay '3'
        option maxsendspeed '0'
        option maxrecvspeed '0'
        option speedlimitperiod '0-0'
        option syncperiod '0-24'
        option syncinterval '3600'
        option tasknumber '2'
        option threadnumber '2'

config syncpath
        option localpath '/mnt/example'
        option remotepath '/apps/SyncY/example'
        option enable '1'
        option synctype 'upload'
        #option encryption 'ARC4'       # 0 is disable encryption
        #option encryptkey 'This is a encrypt key'

config syncytoken

接下来,复制syncy.py到/usr/bin目录下,授予syncy.py可执行权限。

然后直接执行syncy.py获取用户码, 获取用户码后按照提示打开百度授权页面https://openapi.baidu.com/device

ubuntu启动脚本,在/etc/init.d目录下建立syncy文件并授予可执行权限,文件内容如下::

#!/bin/bash

case "$1" in
  start)
        /usr/bin/syncy.py &
        ;;
  stop)
        if [ -e /var/run/syncy.pid ] ; then
           sypid=$(cat /var/run/syncy.pid)
           kill $sypid
        fi
        ;;
  restart)
        if [ -e /var/run/syncy.pid ] ; then
           sypid=$(cat /var/run/syncy.pid)
           kill $sypid
        fi
        sleep 1
        /usr/bin/syncy.py &
        ;;
esac

ubuntu下运行可能会出现.syncy.info.db文件锁报错,解决办法是注释掉出错行:

vim /usr/bin/syncy.py

1429             with open(dbfile, 'rb') as sydb:
1430                 #flock(sydb, LOCK_EX)       <---注释
1431                 datarec = sydb.read(40)

官方配置说明:http://www.syncy.cn/index.php/syncyconfighelp/

官方安装文档:http://www.syncy.cn/index.php/syncysetup/

MySQL-Proxy

很多客户端工具可以直接通过代理访问mysql,但是在代码里面用代理比较麻烦。还好mysql官方为我们提供了mysql-proxy套件,可以用它以透明代理方式访问了。

下载地址:http://downloads.mysql.com/archives/proxy/

安装过程:

wget http://downloads.mysql.com/archives/get/file/mysql-proxy-0.8.5-linux-debian6.0-x86-64bit.tar.gz
tar -zxvf mysql-proxy-0.8.5-linux-debian6.0-x86-64bit.tar.gz
mkdir /usr/local/mysql-proxy
cp mysql-proxy-0.8.5-linux-debian6.0-x86-64bit/* /usr/local/mysql-proxy -R

编辑配置文件:vim /usr/local/mysql-proxy/mysql-proxy.conf

[mysql-proxy]
proxy-address = 0.0.0.0:9300    #监听地址和端口
admin-address = localhost:4041  #定义内部管理服务器账号,只做代理不用关注
admin-username = mytest    
admin-password = 123456
admin-lua-script = /usr/local/mysql-proxy/lib/mysql-proxy/lua/admin.lua
proxy-backend-addresses = 192.168.0.56:3306  #实际mysql地址

启动:

/usr/local/mysql-proxy/bin/mysql-proxy --defaults-file=/usr/local/mysql-proxy/mysql-proxy.conf &

注:

mysql-proxy.conf配置文件权限设置为0660

配置文件里的中文注释不能跟在后面,请自行删除。