10月 02

防火墙中”connection state”与“tcp Flags” 理解学习

“connection state”译为链接状态。于协议无关,可以是TCP、UDP、DNS各种协议的连接状态。不同的业务又有相应的协议做支撑。
如TCP协议,发送报文与设备进行协议交互,确认本协议可以完成协议链接、发送命令、传输数据的工作。

“connection state”链接状态

 new:  连接中的第一个包。
 established:  连接已经成功,开始发送命令,传输数据。
 related:  established进行中,需要增加业务的连接包。
 invalid:  没有状态,没有被识别的报文。
 untracked:  无法找到相关报文,未被追踪。

TCP协议

F : FIN - 结束; 结束会话
S : SYN - 同步; 表示开始会话请求
R : RST - 复位;中断一个连接
P : PUSH - 推送; 数据包立即发送
A : ACK - 应答
U : URG - 紧急
E : ECE - 显式拥塞提醒回应
W : CWR - 拥塞窗口减少

参考学习:
http://www.zsythink.net/archives/1597
https://blog.csdn.net/hunanchenxingyu/article/details/26577201

9月 18

snmp 交换机 带宽计算 python

交换机设置SNMP协议,例为V2C版本,获取接口速度。

<code>def getData():
     shost = "192.168.0.2"
     sDevport = "20"
     sin1 = os.popen('snmpwalk -v 2c -c pass ' + \
                      shost + ' IF-MIB::ifHCInOctets.'+ \
                     sDevport).read()[:-1].split()[-1]
     sout1 = os.popen('snmpwalk -v 2c -c pass ' + \
                       shost + ' IF-MIB::ifHCOutOctets.'+ \
                       sDevport).read()[:-1].split()[-1]
     time.sleep(5)
     sin2 = os.popen('snmpwalk -v 2c -c pass ' + \
                      shost + ' IF-MIB::ifHCInOctets.'+ \
                      sDevport).read()[:-1].split()[-1]
     sout2 = os.popen('snmpwalk -v 2c -c pass ' + \
                       shost + ' IF-MIB::ifHCOutOctets.'+ \
                       sDevport).read()[:-1].split()[-1]
     inT = round((float(sin2) - float(sin1))*8/1024/1024/5, 2)
     outT = round((float(sout2) - float(sout1))*8/1024/1024/5, 2)
     return inT, outT</code>

踩坑列表

1)sDevport 端口不是设备的物理端口。如交换机25口,用命令snmpwalk -v 2c -c pass 192.168.1.2 |grep 25,查找 IF-MIB::ifDescr.XX。XX为扩展的口。

2)不要是用IF-MIB::ifInOctets.XX,用IF-MIB::ifHCInOctets.XX。前者为32位,后者为64位记录。前者容易满计算麻烦。

3)交换机返回的为累加统计,所以需要中间等待后,再次获取,计算两次的差。

4)返回的值为byte,需要先乘8,计算为bit然后再除1024,计算进位量。

9月 13

golang 自动编译脚本、带版本、格式整理和压缩

开发环境:
centos x86_64 7.3
golang 1.12.3

使用yum安装 upx用于压缩
golang代码main.go部分:

import (
"flag"
"fmt"
"os"
)
var (
VERSION = "unknown"
showVer bool
)
func main() {
flag.BoolVar(&showVer, "V", false, "show version and exit")
flag.Parse()
if showVer {
fmt.Println("version:", _VERSION_)
os.Exit(0)
}
/*主代码*/
}
编译文件Makefile
.PHONY: build clean tool  help
BUILD_VERSION := v0.0.1
programName = "testVersion"
all: build
build:
@go build -v -ldflags "-s -w \
-X main.VERSION=${BUILD_VERSION}" .
bb:
@go build -v -ldflags "-s -w" .
upx -9 $(programName)
tool:
go vet ./…; true
gofmt -w .
clean:
go clean -i .
help:
@echo "make: compile packages and dependencies"
@echo "make tool: run specified go tool"
@echo "make clean: remove object files and cached files"
自动执行autoMake.sh
!/bin/env bash
nPath=pwd
softName=basename $nPath
rm -rf $softName
find . -name ".go" -not -path "./vendor/" -not -path ".git/*" | xargs gofmt -s -d -w
make
upx -9 $softName

执行autoMake.sh,完成编译。

执行 ./testVersion -V 显示版本,不输入直接执行。