PHP在RS232串口通讯协议的应用演示[测试环境PHP5.1.4]

1. 预先的知识:
什么是RS232/RS484及其应用?
引用:
RS232接口就是串口,电脑机箱后方的9芯(或25芯)插座,旁边一般有 “|O|O|” 样标识。 
一般机箱有两个,新机箱有可能只有一个。笔记本电脑有可能没有。 
有很多工业仪器将它作为标准通信端口。通信的内容与格式一般附在仪器的用户说明书中。 

计算机与计算机或计算机与终端之间的数据传送可以采用串行通讯和并行通讯二种方式。由于串行通讯方式具有使用线路少、成本低,特别是在远程传输 时,避免了多条线路特性的不一致而被广泛采用。 在串行通讯时,要求通讯双方都采用一个标准接口,使不同 的设备可以方便地连接起来进行通讯。 RS- 232-C接口(又称 EIA RS-232-C)是目前最常用的一种串行通讯接口。它是在1970年由美国电子工业协会(EIA)联合贝尔系统、 调制 解调器厂家及计算机终端生产厂家共同制定的用于串行通讯的标 准。它的全名是“数据终端设备(DTE)和数据通讯设备(DCE)之间 串行二进制数据交换 接口技术标准”该标准规定采用一个25个脚的 DB25连接器,对连接器的每个引脚的信号内容加以规定,还对各种信 号的电平加以规定。 

(1)接口的信号内容 实际上RS-232-C的25条引线中有许多是很少使用的,在计算机与终端通讯中一般只使用3-9条引线。RS-232-C最常用的9条引线的信号内容见附表1所示 

(2)接口的电气特性 在RS-232-C中任何一条信号线的电压均为负逻辑关系。即:逻 辑“1”,-5— -15V;逻辑“0” +5— +15V 。噪声容限为2V。即 要求接收器能识别低至+3V的信号作为逻辑“0”,高到-3V的信号 作为逻辑“1” 
(3) 接口的物理结构 RS-232-C接口连接器一般使用型号为DB-25的25芯插头座,通常插头在DCE端,插座在DTE端. 一些设备 与PC机连接的RS-232-C接口,因为不使用对方的传送控制信号,只需三条接口线,即“发送数据”、“接收数据”和“信号地”。所以采用DB-9的9 芯插头座,传输线采用屏蔽双绞线。 

(4)传输电缆长度 由RS-232C标准规定在码元畸变小于4%的情况下,传输电缆长度应为50英尺,其实这个4%的码元畸变是很保守的,在实 际应用中,约有99%的用户是按码元畸变10-20%的范围工作的,所以实际使用中最大距离会远超过50英尺,美国DEC公司曾规定允许码元畸变为10% 而得出附表2 的实验结果。其中1号电缆为屏蔽电缆,型号为DECP.NO.9107723 内有三对双绞线,每对由22# AWG 组成,其外覆以屏蔽 网。2号电缆为不带屏蔽的电缆。型号为DECP.NO.9105856-04是22#AWG的四芯电缆。 

1.RS-232-C是美国电子工业协会EIA(Electronic Industry Association)制定的一种串行物理接口标 准。RS是英文“推荐标准”的缩写,232为标识号,C表示修改次数。RS-232-C总线标准设有25条信号线,包括一个主通道和一个辅助通道,在多数 情况下主要使用主通道,对于一般双工通信,仅需几条信号线就可实现,如一条发送线、一条接收线及一条地线。RS-232-C标准规定的数据传输速率为每秒 50、75、 100、150、300、600、1200、2400、4800、9600、19200波特。RS-232-C标准规定,驱动器允许有 2500pF的电容负载,通信距离将受此电容限制,例如,采用150pF/m的通信电缆时,最大通信距离为15m;若每米电缆的电容量减小,通信距离可以 增加。传输距离短的另一原因是RS-232属单端信号传送,存在共地噪声和不能抑制共模干扰等问题,因此一般用于20m以内的通信。 

2.RS-485总线,在要求通信距离为几十米到上千米时,广泛采用RS-485 串行总线标准。RS-485采用平衡发送和差分接收,因此具有 抑制共模干扰的能力。加上总线收发器具有高灵敏度,能检测低至200mV的电压,故传输信号能在千米以外得到恢复。 RS-485采用半双工工作方式,任 何时候只能有一点处于发送状态,因此,发送电路须由使能信号加以控制。RS-485用于多点互连时非常方便,可以省掉许多信号线。应用RS-485 可以 联网构成分布式系统,其允许最多并联32台驱动器和32台接收器。 

以往,PC与智能设备通讯多借助RS232、RS485、以太网等方式,主要取决于设备的接口规范。但RS232、RS485只能代表通讯的物理 介质层和链路层,如果要实现数据的双向访问,就必须自己编写通讯应用程序,但这种程序多数都不能符合ISO/OSI的规范,只能实现较单一的功能,适用于 单一设备类型,程序不具备通用性。在RS232或RS485设备联成的设备网中,如果设备数量超过2台,就必须使用RS485做通讯介质,RS485网的 设备间要想互通信息只有通过“主(Master)”设备中转才能实现,这个主设备通常是PC,而这种设备网中只允许存在一个主设备,其余全部是从 (Slave)设备。而现场总线技术是以ISO/OSI模型为基础的,具有完整的软件支持系统,能够解决总线控制、冲突检测、链路维护等问题。

来源网址:http://zhidao.baidu.com/question/4578886.html

从串口双机对联线缆指南
引用:
(一)串行通讯电缆的制作

无论是9孔插头,还是25孔插头,其串行通讯电缆连接时都要遵循下列对接关系:

SG←→SG TXD←→RXD RXD←→TXD RTS←→CTS
CTS←→RTS DTR←→DSR DSR←→DTR

根据上述对接关系,就可以非常方便地连接串行通讯电缆。这里顺便介绍一下上述各引脚所代表的含义:

SG英文全称为Signal Ground/Common Return,表示信号地;
TXD指Transmitted Data,表示数据发送;
RXD指Received Data,表示接收数据;
RTS指Request To Send,表示发送请求;
CTS指Clear To Send,表示清除请求;
DTR指Data Terminal Ready,表示数据终端准备就绪;
DSR指Data Signal Rate Selector,表示数据置位准备就绪。

在制作9芯串口连线时,需要2个9孔插头和1.5米长的至少7芯的扁平电缆,引脚连线如下所示。

9孔插头-9孔插头引脚连线为:2-3、3-2、4-6、5-5、6-4、7-8、8-7。
9孔插头-25孔插头引脚连线为:2-2、3-3、4-6、5-7、6-20、7-5、8-4。
25孔插头-25孔插头引脚连线为:2-3、3-2、4-5、5-4、6-20、7-7、20-6。

来源网址:http://win2000server.vicp.net:88/Article_Show.asp?ArticleID=25

二、测试环境的构建:
1.  参考上面的《(一)串行通讯电缆的制作》,首先把两台电脑通过串口连结起来。
当然,你也完全可以这么操作一台电脑上面的两个串口,而不需要两台电脑;如果你有两个串口的话。
因为我以前做过工业控制底层开发,所以我可以很容易的构建这个基本的环境;
实际上,只要:[color=red]RxD TxD对接,GND直连即可,俗称三线连接。[/color]
这一点不做任何答疑。

2. PHP运行环境的构建:
操作系统:WindowsXP(其他Windows系统没有测试)
PHP5.1.4: http://cn.php.net/get/php-5.1.4-Win32.zip/from/a/mirror
PECL5.1.4:http://cn.php.net/get/pecl-5.1.4-Win32.zip/from/a/mirror
解压PHP5.1.4,把PECL5.1.4之中的php_dio.dll放到PHP5.1.4的ext目录之下
把PHP5.1.4之中的php.ini-dist拷贝粘贴为php.ini,并打开设置然后保存:

extension=php_dio.dll

这一点不做任何答疑。

三:参考资料:
1. 参考手册文档:
http://cn.php.net/manual/zh/ref.dio.php
http://cn.php.net/manual/zh/ref.exec.php
如果代码之中有你没有见过,或者没有使用过,或者不熟悉的函数,请访问以上网址。
主要使用了PHP的Direct IO Functions.

四:演示代码:
[color=Green][font=Times New Roman]

// -------------------------------------------------------------------------- 
// File name   RS232_Server.php 
// Description RS232演示上位机程序 
// Requirement PHP 5.1.4 (cli) (http://www.php.net) 
// 
// Copyright(C), HonestQiao, 2006, All Rights Reserved. 
// 
// Author: HonestQiao (honestqiao@hotmail.com/QQ:5601680)  
// 
// 程序简介: 
// 本程序与RS232_Client构成一个完整的演示系统,展示了PHP在RS232串口通讯上的应用。 
// 程序之中实现了一个基础但是完整的RS232通讯协议(HQB232),通讯协议格式如下: 
// 协议内容: 
//             C->S 01 //请求通讯 
//             S->C 02 //响应通讯 
//             C->S LEN DATA //LEN表示数据(DATA)长度 DATA表示实际数据 
//             C->S 03 //结束通讯 
// 说明:S表示上位机 C表示下位机 
//       HQB232表示HonestQiao演示的基础(Base)RS232通讯协议,包含了协议的 
//   请求和响应,数据帧的结构。 
//       演示过程为通讯的请求和响应,十次数据帧的发送, 通讯的结束 
//       数据帧的结构为当前的序号,microtime(),随机字符串 
//         
//       欢迎探讨PHP在RS232串口通讯上的应用。 
// -------------------------------------------------------------------------- 
set_time_limit(0); 
exec('mode COM1: baud=115200 data=8 stop=1 parity=n xon=on'); 

$fd dio_open('COM1:', O_RDWR); 
if(!$fd) 
{ 
die("Error when open COM1"); 
} 

$ff dio_stat($fd);print_r($ff); 
echo "HQB232 SERVER is listenning on COM1\n"; 
/// read 
$len 2; 
$t=0;while (($t++)<1000)  
{ 
$data dio_read($fd, $len); 
if ($data) { 
if($data==chr(0).chr(1)){ 
echo "S_RECV:01\n"; 
echo "S_SEND:02\n"; 
dio_write($fd,chr(0).chr(2)); 
break; 
} 
} 
} 

/// read 
$len 2; 
$t=0;while (($t++)<1000)  
{ 
$len 2; 
$data dio_read($fd, $len); 
if($data==chr(0).chr(3)){ 
echo "S_RECV:03\n"; 
break; 
} 
elseif ($data) { 
$len intval($data); 
$data dio_read($fd, $len); 
if($data){ 
echo "S_RECV:($len)$data\n"; 
} 
} 
} 
dio_close($fd);









// File name   RS232_Client.php 
// Description RS232演示下位机程序 
// Requirement PHP 5.1.4 (cli) (http://www.php.net) 
// 
// Copyright(C), HonestQiao, 2006, All Rights Reserved. 
// 
// Author: HonestQiao (honestqiao@hotmail.com/QQ:5601680)  
// 
// 程序简介: 
// 本程序与RS232_Server构成一个完整的演示系统,展示了PHP在RS232串口通讯上的应用。 
// 程序之中实现了一个基础但是完整的RS232通讯协议(HQB232),通讯协议格式如下: 
// 协议内容: 
//             C->S 01 //请求通讯 
//             S->C 02 //响应通讯 
//             C->S LEN DATA //LEN表示数据(DATA)长度 DATA表示实际数据 
//             C->S 03 //结束通讯 
// 说明:S表示上位机 C表示下位机 
//       HQB232表示HonestQiao演示的基础(Base)RS232通讯协议,包含了协议的 
//   请求和响应,数据帧的结构。 
//       演示过程为通讯的请求和响应,十次数据帧的发送, 通讯的结束 
//       数据帧的结构为当前的序号,microtime(),随机字符串 
//         
//       欢迎探讨PHP在RS232串口通讯上的应用。 
// -------------------------------------------------------------------------- 
set_time_limit(0); 
exec('mode COM2: baud=115200 data=8 stop=1 parity=n xon=on'); 

$fd dio_open('COM2:', O_RDWR); 
if(!$fd) 
{ 
die("Error when open COM2"); 
} 

$ff dio_stat($fd);print_r($ff); 
echo "HQB232 CLIENT is start on COM2\n"; 
dio_write($fd,chr(0).chr(1));echo "C_SEND:01\n"; 
$len 2; 
$t=0;while(($t++)<1000) 
{ 
$data dio_read($fd, $len); 
if($data==chr(0).chr(2)){ 
echo "C_RECV:02\n"; 
break; 
} 
} 
$len 2; 
$t=0;while(($t++)<10) 
{ 
$sdata sprintf("d",$t) "=" microtime() (" randomkeys(rand(0,35)) ")"; 
$slen strlen($sdata); 
$stxlen sprintf("d",$slen); 
dio_write($fd,"$stxlen"); 
dio_write($fd,"$sdata");echo "C_SEND:($stxlen)$sdata\n"; 
//sleep(1); 
} 
dio_write($fd,chr(0).chr(3));echo "C_SEND:03\n"; 
dio_close($fd); 

function randomkeys($length) 
  { 
   $pattern "1234567890abcdefghijklmnopqrstuvwxyz"; 
   for($i=0;$i<$length;$i++) 
   { 
     $key .= $pattern{rand(0,35)}; 
   } 
   return $key; 
}
五、演示过程: 
上位机:开始->运行->CMD 
然后转到PHP5.1.4目录之下,执行: 
php -f RS232_Server.php 

下位机:开始->运行->CMD 
然后转到PHP5.1.4目录之下,执行: 
php -f RS232_Client.php 


实际结果如下:

F:\usr\local\php5>php -f e:\RS232_Server.php 
Array 
( 
    [device] => 3 
    [inode] => 0 
    [mode] => 8192 
    [nlink] => 1 
    [uid] => 0 
    [gid] => 0 
    [device_type] => 3 
    [size] => 0 
    [atime] => 0 
    [mtime] => 0 
    [ctime] => 0 
) 
HQB232 SERVER is listenning on COM1 
S_RECV:01 
S_SEND:02 
S_RECV:(53)001=0.19238200 1150031774 (krruv981gpf1pmi1fz4qz09e9) 
S_RECV:(42)002=0.19144800 1150031775 (jrhw41mphuy0ui) 
S_RECV:(40)003=0.19148500 1150031776 (lqq560p6v17r) 
S_RECV:(36)004=0.19148900 1150031777 (3ct02xmc) 
S_RECV:(28)005=0.19212700 1150031778 () 
S_RECV:(33)006=0.19162500 1150031779 (2ilqf) 
S_RECV:(34)007=0.19167800 1150031780 (vwmdfc) 
S_RECV:(62)008=0.19168700 1150031781 (idb0laix4a6ryxz5nb7u74iaza601it6sv) 
S_RECV:(56)009=0.19170100 1150031782 (r9ypgtvu4j7w1u141qx6im20ajy7) 
S_RECV:(53)010=0.19171000 1150031783 (wq5mp1sdfuet1tp0x3vk67n47) 
S_RECV:03 

F:\usr\local\php5>


F:\usr\local\php5>php -f e:\RS232_Client.php 
Array 
( 
    [device] => 3 
    [inode] => 0 
    [mode] => 8192 
    [nlink] => 1 
    [uid] => 0 
    [gid] => 0 
    [device_type] => 3 
    [size] => 0 
    [atime] => 0 
    [mtime] => 0 
    [ctime] => 0 
) 
HQB232 CLIENT is start on COM2 
C_SEND:01 
C_RECV:02 
C_SEND:(53)001=0.19238200 1150031774 (krruv981gpf1pmi1fz4qz09e9) 
C_SEND:(42)002=0.19144800 1150031775 (jrhw41mphuy0ui) 
C_SEND:(40)003=0.19148500 1150031776 (lqq560p6v17r) 
C_SEND:(36)004=0.19148900 1150031777 (3ct02xmc) 
C_SEND:(28)005=0.19212700 1150031778 () 
C_SEND:(33)006=0.19162500 1150031779 (2ilqf) 
C_SEND:(34)007=0.19167800 1150031780 (vwmdfc) 
C_SEND:(62)008=0.19168700 1150031781 (idb0laix4a6ryxz5nb7u74iaza601it6sv) 
C_SEND:(56)009=0.19170100 1150031782 (r9ypgtvu4j7w1u141qx6im20ajy7) 
C_SEND:(53)010=0.19171000 1150031783 (wq5mp1sdfuet1tp0x3vk67n47) 
C_SEND:03 

F:\usr\local\php5>


六:说明 
1. exec('mode COM1: baud=115200 data=8 stop=1 parity=n xon=on'); 
    exec('mode COM2: baud=115200 data=8 stop=1 parity=n xon=on'); 

mode是CMD下面的命令,表示设置串口的参数,因为dio_tcsetattr() 未在Windows下面实现,所以需要使用CMD的mode命令来进行设置,具体用法,请看:help mode 

2. 通讯协议使用ASCII文本进行,没有使用HEX十六进制。因为是演示程序,所以协议非常简单,但是一个协议基本的内容都有了。 

3. 下位机程序的sleep(1),这个是通讯之中常见的情况,数据传输和上位机处理需要一定的时间。 

4. 演示的为RS232,以此类推,你也可以用到其他的场合。例如:简单修改,应用到HTTP通讯。 

5. 硬件环境的建立,PHP环境的建立,不做任何答疑。 

6. 欢迎探讨。 

7. 感谢mikespook的意见,附加,如果是*nix,则: 
'/dev/ttyS0'表示第一个COM端口,依此类推;端口的设置,应该在dio_open之后,使用: 
dio_tcsetattr($fd, array( 
  'baud' => 9600, 
  'bits' => 8, 
  'stop'  => 1, 
  'parity' => 0 
));

Shadowsocks客户端下载地址

各版本Shadowsocks客户端下载地址(Windows,Mac,Linux,Android/安卓,iOS/苹果)

官方客户端下载地址在:Shadowsocks Clients

不用再购买节点,自己搭建一台ss服务器:一键脚本搭建SS/SSR服务并开启BBR加速

Shadowsocks各版本官方下载地址

1. Windows客户端下载地址:https://github.com/shadowsocks/shadowsocks-windows/releases

Windows对Framework的版本要求比价高,我的是4.0.2的要求Framework4.6.2。如果是XP或者Framework比较低的,可以直接下载低版本的ss(windows 2.3.1下载地址:https://github.com/shadowsocks/shadowsocks-windows/releases?after=2.5.1

2. Mac客户端下载地址:https://github.com/shadowsocks/ShadowsocksX-NG/releases

3. Linux客户端下载地址:https://github.com/shadowsocks/shadowsocks-qt5/wiki/Installation

4. Android/安卓客户端下载地址:https://github.com/shadowsocks/shadowsocks-android/releases

5. iOS/苹果客户端直接在App Store里搜索shadowsock关键字(或者wingy关键字,FirstWingy可用 2018.03.25),软件经常被下架,我目前用的是Wingy & Shadowrocket~如果找不到,你也可以通过PP助手去下载Shadowrocket。(2018年6月18日更,目前App Store可用免费iOS软件:暂无。收费软件:SuperWingy,ShadowBroken。推荐免费下载iOS客户端方法:也可以电脑下载PP助手,手机连上电脑后会自动将PP助手同步至手机,不需要越狱,之后在手机上通过PP助手下载shadowrocket)

在CENTOS 7上搭建Shadowsocks图文教程

这里介绍的是使用Pip作为管理软件对shadowsocks进行管理,所以我们应该首先安装一下pip。

安装pip

pip的安装这里参考官网-Installation,即,输入curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py后回车,如下:

[root@ssserver ~]# curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100 1604k  100 1604k    0     0  11.1M      0 --:--:-- --:--:-- --:--:-- 11.2M

然后,输入python get-pip.py之后回车,如下:

[root@ssserver ~]# python get-pip.py
Collecting pip
  Downloading https://files.pythonhosted.org/packages/5f/25/e52d3f31441505a5f3af41213346e5b6c221c9e086a166f3703d2ddaf940/pip-18.0-py2.py3-none-any.whl (1.3MB)
    100% |████████████████████████████████| 1.3MB 11.3MB/s 
Collecting wheel
  Downloading https://files.pythonhosted.org/packages/81/30/e935244ca6165187ae8be876b6316ae201b71485538ffac1d718843025a9/wheel-0.31.1-py2.py3-none-any.whl (41kB)
    100% |████████████████████████████████| 51kB 17.5MB/s 
Installing collected packages: pip, wheel
Successfully installed pip-18.0 wheel-0.31.1
[root@ssserver ~]# 

安装shadowsocks

输入pip install shadowsocks后回车,如下:

[root@ssserver ~]# pip install shadowsocks
Collecting shadowsocks
  Downloading https://files.pythonhosted.org/packages/02/1e/e3a5135255d06813aca6631da31768d44f63692480af3a1621818008eb4a/shadowsocks-2.8.2.tar.gz
Building wheels for collected packages: shadowsocks
  Running setup.py bdist_wheel for shadowsocks ... done
  Stored in directory: /root/.cache/pip/wheels/5e/8d/b6/3e2243a7e116984b2c3597c122c29abcfeac77daa260079e88
Successfully built shadowsocks
Installing collected packages: shadowsocks
Successfully installed shadowsocks-2.8.2

提示安装成功!

配置shadowsocks

输入编辑文件命令vi /etc/shadowsocks.json并回车,如下:

[root@ssserver ~]# vi /etc/shadowsocks.json

上述步骤是编辑一个新文件,按键盘i键后,粘贴下面内容:

{
    "server":"0.0.0.0",
    "server_port":50013,
    "local_port":1080,
    "password":"1234567890",
    "timeout":600,
    "method":"aes-256-cfb"
}

然后按键盘’Esc’键,再按shift+:键,再输入wq并回车。文件编辑结束。

上面的50013是你的服务器端口,1234567890是你进行连接的密码。

将shadowsocks加入系统服务

输入编辑文件命令vi /etc/systemd/system/shadowsocks.service并回车,如下:

[root@ssserver ~]# vi /etc/systemd/system/shadowsocks.service

按键盘i键后,粘贴下面内容:

[Unit]
Description=Shadowsocks
[Service]
TimeoutStartSec=0
ExecStart=/usr/bin/ssserver -c /etc/shadowsocks.json
[Install]
WantedBy=multi-user.target

然后按键盘’Esc’键,再按shift+:键,再输入wq并回车。文件编辑结束。

启动shadowsocks服务并设置开机自启

# 设置开机自启命令
systemctl enable shadowsocks

# 启动命令
systemctl start shadowsocks

#查看状态命令
systemctl status shadowsocks

依次执行上面的三条命令,如下:

[root@ssserver ~]# vi /etc/shadowsocks.json
[root@ssserver ~]# 
[root@ssserver ~]# 
[root@ssserver ~]# vi /etc/systemd/system/shadowsocks.service
[root@ssserver ~]# 
[root@ssserver ~]# 
[root@ssserver ~]# 
[root@ssserver ~]# systemctl enable shadowsocks
Created symlink from /etc/systemd/system/multi-user.target.wants/shadowsocks.service to /etc/systemd/system/shadowsocks.service.
[root@ssserver ~]# systemctl start shadowsocks
[root@ssserver ~]# systemctl status shadowsocks
 shadowsocks.service - Shadowsocks
   Loaded: loaded (/etc/systemd/system/shadowsocks.service; enabled; vendor preset: disabled)
   Active: active (running) since Tue 2018-08-28 13:27:53 UTC; 7s ago
 Main PID: 1259 (ssserver)
   CGroup: /system.slice/shadowsocks.service
           └─1259 /usr/bin/python /usr/bin/ssserver -c /etc/shadowsocks.json

Aug 28 13:27:53 ssserver systemd[1]: Started Shadowsocks.
Aug 28 13:27:53 ssserver systemd[1]: Starting Shadowsocks...
Aug 28 13:27:54 ssserver ssserver[1259]: INFO: loading config from /etc/shadowsocks.json
Aug 28 13:27:54 ssserver ssserver[1259]: 2018-08-28 13:27:54 INFO     loading libcrypto from libcrypto.so.10
Aug 28 13:27:54 ssserver ssserver[1259]: 2018-08-28 13:27:54 INFO     starting server at 0.0.0.0:50013

CentOS开放端口的方法

Centos升级到7之后,内置的防火墙已经从iptables变成了firewalld。所以,端口的开启还是要从两种情况来说明的,即iptables和firewalld。更多关于CentOs防火墙的最新内容,请参考Redhat官网[4.5 使用防火墙]。

一、iptables(centos 6及以前)

1.打开/关闭/重启防火墙

开启防火墙(重启后永久生效):chkconfig iptables on

关闭防火墙(重启后永久生效):chkconfig iptables off

开启防火墙(即时生效,重启后失效):service iptables start

关闭防火墙(即时生效,重启后失效):service iptables stop

重启防火墙:service iptables restartd

2.查看打开的端口

/etc/init.d/iptables status

3.打开某个端口(以8080为例)

(1)开启端口

iptables -A INPUT -p tcp --dport 8080 -j ACCEPT 

(2)保存并重启防火墙

/etc/rc.d/init.d/iptables save
/etc/init.d/iptables restart

4.打开49152~65534之间的端口

iptables -A INPUT -p tcp --dport 49152:65534 -j ACCEPT  

同样,这里需要对设置进行保存,并重启防火墙。

5.其他打开方式

我们还可以通过修改/etc/sysconfig/iptables文件的方式开启端口,如下

vi /etc/sysconfig/iptables

然后在文件中增加一行

-A RH-Firewall-1-INPUT -m state state NEW -m tcp -p tcp dport 8080 -j ACCEPT

参数说明:

  • –A 参数就看成是添加一条规则
  • –p 指定是什么协议,我们常用的tcp 协议,当然也有udp,例如53端口的DNS
  • –dport 就是目标端口,当数据从外部进入服务器为目标端口
  • –sport 数据从服务器出去,则为数据源端口使用
  • –j 就是指定是 ACCEPT -接收 或者 DROP 不接收

二、firewalld(centos7)

Centos7默认安装了firewalld,如果没有安装的话,可以使用 yum install firewalld firewalld-config进行安装。

1.启动防火墙

systemctl start firewalld 

2.禁用防火墙

systemctl stop firewalld

3.设置开机启动

systemctl enable firewalld

4.停止并禁用开机启动

sytemctl disable firewalld

5.重启防火墙

firewall-cmd --reload

6.查看状态

systemctl status firewalld或者 firewall-cmd --state

7.查看版本

firewall-cmd --version

8.查看帮助

firewall-cmd --help

9.查看区域信息

firewall-cmd --get-active-zones

10.查看指定接口所属区域信息

firewall-cmd --get-zone-of-interface=eth0

11.拒绝所有包

firewall-cmd --panic-on

12.取消拒绝状态

firewall-cmd --panic-off

13.查看是否拒绝

firewall-cmd --query-panic

14.将接口添加到区域(默认接口都在public)

firewall-cmd --zone=public --add-interface=eth0(永久生效再加上 --permanent 然后reload防火墙)

15.设置默认接口区域

firewall-cmd --set-default-zone=public(立即生效,无需重启)

16.更新防火墙规则

firewall-cmd --reloadfirewall-cmd --complete-reload(两者的区别就是第一个无需断开连接,就是firewalld特性之一动态
添加规则,第二个需要断开连接,类似重启服务)

17.查看指定区域所有打开的端口

firewall-cmd --zone=public --list-ports

18.在指定区域打开端口(记得重启防火墙)

firewall-cmd --zone=public --add-port=80/tcp(永久生效再加上 --permanent)

说明:
–zone 作用域
–add-port=8080/tcp 添加端口,格式为:端口/通讯协议
–permanent #永久生效,没有此参数重启后失效

一键脚本搭建SS/SSR服务并开启BBR加速

什么是shadowsocks

shadowsocks可以指一种SOCKS5的加密传输协议,也可以指基于这种加密协议的各种数据传输包。

shadowsocks原理?shadowsocks正常工作需要服务器端和客户端两端合作实现,首先,客户端(本机)通过ss(shadowsocks)对正常的访问请求进行SOCK5加密,将加密后的访问请求传输给ss服务器端,服务器端接收到客户端的加密请求后,解密得到原始的访问请求,根据请求内容访问指定的网,得到网站的返回结果后,再利用SOCKS5加密并返回给客户端,客户端通过ss解密后得到正常的访问结果,于是就可以实现你直接访问该网站的“假象”。

为什么选择shadowsocks?不限终端(安卓,苹果,Windows,Mac都可用),流量便宜(服务器500G只要15元),方便(一键脚本,不需要专业知识)。

为什么要自己搭建ss/ssr?你也许会觉得买ss服务也很方便,但是你得要考虑以下几个问题。首先,买的ss服务,限制很多,终端可能只能同时在线2个,每个月就一点点流量可能价格却不便宜,有时候还被别人做手脚,流量跑的贼快;其次,别人收钱跑路怎么办?很多这种情况的;更重要的是,如第一个问题中描述的shadowsocks原理,如果有心人做了一点手脚,是可以得到你的访问记录的;而自己搭建ss/ssr服务,一键脚本也就10来分钟就可以搞定。

一键脚本搭建ss/ssr支持系统版本

脚本系统支持:CentOS 6+,Debian 7+,Ubuntu 12+

:这个脚本支持的系统版本是指ss服务器的版本(都没看过也没关系,不影响搭建),你本机是Windows、Mac、Linux,或者你想用手机端搭建ss/ssr服务器,安卓和苹果,都是可以的。

一键搭建SS/搭建SSR服务

注意,shadowsocks/shadowsocksR这两个只需要搭建一个就可以了!!!!我用的是SS。

1.下载一键搭建SS脚本文件(只需要执行一次,卸载SS后也不需要重新下载)

git clone https://github.com/flyzy2005/ss-fly

2.运行搭建ss脚本代码

ss-fly/ss-fly.sh -i flyzy2005.com 1024

其中flyzy2005.com换成你要设置的shadowsocks的密码即可(这个flyzy2005.com就是你ss的密码了,是需要填在客户端的密码那一栏的),密码随便设置,最好只包含字母+数字,一些特殊字符可能会导致冲突。而第二个参数1024是端口号,也可以不加,不加默认是1024~(举个例子,脚本命令可以是ss-fly/ss-fly.sh -i qwerasd,也可以是ss-fly/ss-fly.sh -i qwerasd 8585,后者指定了服务器端口为8585,前者则是默认的端口号1024,两个命令设置的ss密码都是qwerasd)

注:如果需要改密码或者改端口,只需要重新再执行一次搭建ss脚本代码就可以了,或者修改/etc/shadowsocks.json这个配置文件。

3.相关ss操作

修改配置文件:vim /etc/shadowsocks.json
停止ss服务:ssserver -c /etc/shadowsocks.json -d stop
启动ss服务:ssserver -c /etc/shadowsocks.json -d start
重启ss服务:ssserver -c /etc/shadowsocks.json -d restart

4.卸载ss服务

ss-fly/ss-fly.sh -uninstall

一键搭建shadowsocksR

再次提醒,如果安装了SS,就不需要再安装SSR了,如果要改装SSR,请按照上一部分内容的教程先卸载SS!!!

1.下载一键搭建ssr脚本(只需要执行一次,卸载ssr后也不需要重新执行)

git clone https://github.com/flyzy2005/ss-fly,此步骤与一键搭建ss一致,出错可以参考上一部分内容。

2.运行搭建ssr脚本代码

ss-fly/ss-fly.sh -ssr

3.输入对应的参数

执行完上述的脚本代码后,会进入到输入参数的界面,包括服务器端口,密码,加密方式,协议,混淆。可以直接输入回车选择默认值,也可以输入相应的值选择对应的选项

全部选择结束后,会看到如下界面,就说明搭建ssr成功了:

Congratulations, ShadowsocksR server install completed!
Your Server IP        :你的服务器ip
Your Server Port      :你的端口
Your Password         :你的密码
Your Protocol         :你的协议
Your obfs             :你的混淆
Your Encryption Method:your_encryption_method

Welcome to visit:https://shadowsocks.be/9.html
Enjoy it!

4.相关操作ssr命令

启动:/etc/init.d/shadowsocks start
停止:/etc/init.d/shadowsocks stop
重启:/etc/init.d/shadowsocks restart
状态:/etc/init.d/shadowsocks status

配置文件路径:/etc/shadowsocks.json
日志文件路径:/var/log/shadowsocks.log
代码安装目录:/usr/local/shadowsocks

5.卸载ssr服务

./shadowsocksR.sh uninstall

一键开启BBR加速

BBR是Google开源的一套内核加速算法,可以让你搭建的shadowsocks/shadowsocksR速度上一个台阶,本一键搭建ss/ssr脚本支持一键升级最新版本的内核并开启BBR加速。

BBR支持4.9以上的,如果低于这个版本则会自动下载最新内容版本的内核后开启BBR加速并重启,如果高于4.9以上则自动开启BBR加速,执行如下脚本命令即可自动开启BBR加速:

ss-fly/ss-fly.sh -bbr

装完后需要重启系统,输入y即可立即重启,或者之后输入reboot命令重启。

判断BBR加速有没有开启成功。输入以下命令:

sysctl net.ipv4.tcp_available_congestion_control

如果返回值为:

net.ipv4.tcp_available_congestion_control = bbr cubic reno

后面有bbr,则说明已经开启成功了。

更新下博客

很久没有更新了,突然来占个位,说明还是存在的。渐渐的,可能点点的会消逝,10年前的一起做互联网网站的的朋友,一个个都散了,很多好久没联系也都不记得了,当初都各怀着梦想,都没现实给打破了,技术的变化,时代的发展,互联网这个东西变化的实在太快太快,原来的PC网络的时代,现在已经被手机说取代,网站也渐渐被APP所取代,各项技术的更新,要是做技术的也确实累,需要无时不刻的,跟着技术语言的发展,不然就落后了。俺么这个已经脱离了,还停留在原来的 HTML的时代,感觉都落后了,哈哈。

netsh命令备份/还原网络配置

如果用户使用笔记本电脑,并经常往来于家庭和公司之间,那么备份网络配置即可避免在网络配置改变之后重新配置。在windows98系统下可以使用”ipconfig /batch bak-netcfg”命令备份网络配置。在windows2000/XP系统下,可以使用netsh命令。
要把主机上的所有网络相关的配置信息备份到C盘test.txt文件,可以运行命令:
netsh dump>c:\test.txt
要把本机中远程访问连接和TCP/IP配置接口参数备份到C盘下的test.txt,可以运行命令:netsh interface dump>test.txt。
示例如下:
C:\>netsh dump>c:\test.txt,然后我们就可以在c盘找到test.txt文件,改文件的内容如下:
#========================
# 接口配置
#========================
pushd interface

popd
# 接口配置结束

# ———————————-
# IPHTTPS 配置
# ———————————-
pushd interface httpstunnel

reset

popd
# IPHTTPS 配置的结尾

#========================
# IPv4 配置
#========================
pushd interface ipv4

reset
set global defaultcurhoplimit=64 icmpredirects=enabled taskoffload=enabled

popd
# IPv4 配置结束

# ———————————-
# IPv6 配置
# ———————————-
pushd interface ipv6

reset

popd
# IPv6 配置的结尾

# ———————————-
# ISATAP 配置
# ———————————-
pushd interface isatap

popd
# ISATAP 配置结束

# ———————————-
# 6to4 配置
# ———————————-
pushd interface 6to4

reset

popd
# 6to4 配置结束

# ———————————-
# ISATAP 配置
# ———————————-
pushd interface isatap

popd
# ISATAP 配置结束

#========================
# 端口代理配置
#========================
pushd interface portproxy

reset

popd

# 端口代理配置结束

# ———————————-
# TCP 配置
# ———————————-
pushd interface tcp

reset

全局设置 rss=enabled chimney=automatic autotuninglevel=normal congestionprovider=none ecncapability=disabled timestamps=disabled netdma=enabled dca=enabled

popd
# TCP 配置结束

# ———————————-
# Teredo 配置
# ———————————-
pushd interface teredo
set state type=client servername=teredo.ipv6.microsoft.com. servervirtualip=0.0.0.0

popd
# Teredo 配置结束

# ———————————-
# 6to4 配置
# ———————————-
pushd interface 6to4

reset

popd
# 6to4 配置结束

# ————————————
# 桥配置 (不支持)
# ————————————

# ————————————
# 桥配置结束
# ————————————

# —————————————-
# 有线局域网配置
# —————————————-
pushd lan

popd

# 有线局域网配置结尾。

不支持移动宽带配置转储

# ==========================================================
# 健康注册机构配置
# ==========================================================
pushd nap hra

popd
# NAP HRA 配置的结尾

# —————————————–
# 远程访问配置
# —————————————–
pushd ras

set authmode mode = standard
delete authtype type = PAP
delete authtype type = MD5CHAP
delete authtype type = MSCHAPv2
delete authtype type = EAP
delete authtype type = CERT
add authtype type = MSCHAPv2
delete link type = SWC
delete link type = LCP
add link type = SWC
add link type = LCP
delete multilink type = MULTI
add multilink type = MULTI
set conf confstate = disabled
set type ipv4rtrtype = lananddd ipv6rtrtype = none rastype = ipv4
set wanports device = “WAN Miniport (IKEv2)” rasinonly = disabled ddinout = disabled ddoutonly = disabled maxports = 2
set wanports device = “WAN Miniport (L2TP)” rasinonly = disabled ddinout = disabled ddoutonly = disabled maxports = 2
set wanports device = “WAN Miniport (PPPOE)” ddoutonly = disabled
set wanports device = “WAN Miniport (PPTP)” rasinonly = disabled ddinout = disabled ddoutonly = disabled maxports = 2
set wanports device = “WAN Miniport (SSTP)” rasinonly = disabled ddinout = disabled ddoutonly = disabled maxports = 2

set user name = Administrator dialin = policy cbpolicy = none
set user name = Guest dialin = policy cbpolicy = none

set ikev2connection idletimeout = 5 nwoutagetime = 30
set ikev2saexpiry saexpirytime = 480 sadatasizelimit = 100

popd

# 远程访问配置结束。

# —————————————–
# 远程访问诊断配置
# —————————————–
pushd ras diagnostics

set rastracing component = * state = disabled

set modemtracing state = disabled

set cmtracing state = disabled

set securityeventlog state = disabled

set loglevel events = warn

popd

# 远程访问诊断配置结束

# —————————————–
# 远程访问 IP 配置
# —————————————–
pushd ras ip

delete pool

set negotiation mode = allow
set access mode = all
set addrreq mode = deny
set broadcastnameresolution mode = enabled
set addrassign method = auto
set preferredadapter

popd

# 远程访问 IP 配置结束。

# —————————————–
# 远程访问 IPv6 配置
# —————————————–
pushd ras ipv6

set negotiation mode = deny
set access mode = all
set routeradvertise mode = enabled

popd

# 远程访问 IPv6 配置结束。

# —————————————–
# 远程访问 AAAA 配置
# —————————————–
pushd ras aaaa

popd

# 远程访问 AAAA 配置结束。

# —————————————–
# WinHTTP 代理服务器配置
# —————————————–
pushd winhttp

reset proxy

popd

# WinHTTP 代理服务器配置末尾

以后在进行网络设置调整时,如果发生了操作错误,或者服务器网络出现故障,可以利用备份快速恢复网络设置:
netsh -f c:\test.txt或netsh exec c:\test.txt

VPN(PPTPD)一键安装包,支持Centos6和Centos7.同时支持Openvz和KVM

特别注意:

  1. centos7 会自动停用默认的防火墙,安装 iptables 。所以如果有特别需求的同学就别碰了
  2. 装 vpn 的时候会自动添加 epel 的 yum 源,有洁癖或者特殊需求的请注意
  3. 装 vpn 的时候会自动卸载原来装过的 ppp 和 pptpd ,所以即使想重装也无需自己手动卸载
  4. 有出现安装不了的,无法正常使用的请留言,我尽力解决下。

下载文件, /attachments/1212/vpn_centos_pptpd.sh

安装命令:bash vpn_centos_pptpd.sh

选择 1 :安装 vpn

选择 2 :添加 vpn 账号(安装完后,随时可以使用 bash vpn_centos_pptpd.sh 来选择 2 添加 vpn 账号。当然也可以直接编辑 /etc/ppp/chap-secrets

 

vpn_centos_pptpd.sh  文件代码

 

#!/bin/bash

function installVPN(){
echo “begin to install VPN services”;
#check wether vps suppot ppp and tun

#判断centos版本
if grep -Eqi “release 5.” /etc/redhat-release; then
ver1=’5′
elif grep -Eqi “release 6.” /etc/redhat-release; then
ver1=’6′
elif grep -Eqi “release 7.” /etc/redhat-release; then
ver1=’7′
fi

yum install curl -y
yum install epel-release -y

if [ “$ver1” == “7” ]; then
#centos7要安装iptables把默认防火墙关了。
systemctl stop firewalld.service
systemctl disable firewalld.service
yum install iptables-services -y
#centos7需要加这个权限,否则不会开机自动执行
chmod +x /etc/rc.d/rc.local
fi

#先删除已经安装的pptpd和ppp
rm -rf /etc/pptpd.conf
rm -rf /etc/ppp
yum install -y ppp pptpd

#写配置文件
mknod /dev/ppp c 108 0
echo 1 > /proc/sys/net/ipv4/ip_forward
echo “mknod /dev/ppp c 108 0” >> /etc/rc.local
echo “echo 1 > /proc/sys/net/ipv4/ip_forward” >> /etc/rc.local
echo “localip 172.16.36.1” >> /etc/pptpd.conf
echo “remoteip 172.16.36.2-254” >> /etc/pptpd.conf
echo “ms-dns 8.8.8.8” >> /etc/ppp/options.pptpd
echo “ms-dns 8.8.4.4” >> /etc/ppp/options.pptpd

pass=`openssl rand 6 -base64`
if [ “$1” != “” ]
then pass=$1
fi

echo “vpn pptpd ${pass} *” >> /etc/ppp/chap-secrets

iptables -t nat -A POSTROUTING -s 172.16.36.0/24 -j SNAT –to-source `curl ip.cn | awk -F ‘ ‘ ‘{print $2}’ | awk -F ‘:’ ‘{print $2}’`
iptables -A FORWARD -p tcp –syn -s 172.16.36.0/24 -j TCPMSS –set-mss 1356
iptables -I INPUT -p gre -j ACCEPT
iptables -I INPUT -p tcp -m tcp –dport 1723 -j ACCEPT
service iptables save

if [ “ver1” == “7” ]; then
systemctl enable iptables.service
systemctl enable pptpd.service
systemctl restart iptables.service
systemctl restart pptpd.service
else
chkconfig iptables on
chkconfig pptpd on
service iptables start
service pptpd start
fi

echo “================================================”
echo “感谢 pptpd vpn一键安装包”
echo -e “VPN的初始用户名是:\033[41;37m vpn \033[0m, 初始密码是: \033[41;37m ${pass} \033[0m”
echo “你也可以直接 vi /etc/ppp/chap-secrets修改用户名和密码”
echo “================================================”
}

function addVPNuser(){
echo “input user name:”
read username
echo “input password:”
read userpassword
echo “${username} pptpd ${userpassword} *” >> /etc/ppp/chap-secrets
service iptables restart
service pptpd start
}

echo “which do you want to?input the number.”
echo “1. install VPN service”
echo “2. add VPN user”
read num

case “$num” in
[1] ) (installVPN);;
[2] ) (addVPNuser);;
*) echo “nothing,exit”;;
esac

 

pptpd vpn一键安装包

使用方法:

将如下脚本内容,存储为pptpd.sh,然后运行:
sh pptpd.sh

yum remove -y pptpd ppp
iptables –flush POSTROUTING –table nat
iptables –flush FORWARD
rm -rf /etc/pptpd.conf
rm -rf /etc/ppp

wget http://www.diahosting.com/dload/dkms-2.0.17.5-1.noarch.rpm
wget http://www.diahosting.com/dload/kernel_ppp_mppe-1.0.2-3dkms.noarch.rpm
wget http://www.diahosting.com/dload/pptpd-1.3.4-1.rhel5.1.i386.rpm
wget http://www.diahosting.com/dload/ppp-2.4.4-9.0.rhel5.i386.rpm

yum -y install make libpcap iptables gcc-c++ logrotate tar cpio perl pam tcp_wrappers
rpm -ivh dkms-2.0.17.5-1.noarch.rpm
rpm -ivh kernel_ppp_mppe-1.0.2-3dkms.noarch.rpm
rpm -qa kernel_ppp_mppe
rpm -Uvh ppp-2.4.4-9.0.rhel5.i386.rpm
rpm -ivh pptpd-1.3.4-1.rhel5.1.i386.rpm

mknod /dev/ppp c 108 0
echo 1 > /proc/sys/net/ipv4/ip_forward
echo “mknod /dev/ppp c 108 0” >> /etc/rc.local
echo “echo 1 > /proc/sys/net/ipv4/ip_forward” >> /etc/rc.local
echo “localip 172.16.36.1” >> /etc/pptpd.conf
echo “remoteip 172.16.36.2-254” >> /etc/pptpd.conf
echo “ms-dns 8.8.8.8” >> /etc/ppp/options.pptpd
echo “ms-dns 8.8.4.4” >> /etc/ppp/options.pptpd

pass=`openssl rand 6 -base64`
if [ “$1” != “” ]
then pass=$1
fi

echo “vpn pptpd ${pass} *” >> /etc/ppp/chap-secrets

iptables -t nat -A POSTROUTING -s 172.16.36.0/24 -j SNAT –to-source `ifconfig | grep ‘inet addr:’| grep -v ‘127.0.0.1’ | cut -d: -f2 | awk ‘NR==1 { print $1}’`
iptables -A FORWARD -p tcp –syn -s 172.16.36.0/24 -j TCPMSS –set-mss 1356
service iptables save

chkconfig iptables on
chkconfig pptpd on

service iptables start
service pptpd start

echo “VPN service is installed, your VPN username is vpn, VPN password is ${pass}”