2024年2月28日
AT指令(EC20) 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 45 46 47 48 49 50 1.嵌入式中使用AT指令;必须无校验位 echo -e "AT+CPIN?\r" |busybox microcom -s 115200 /dev/ttyO4 -t 1000 echo -e "AT+CPIN?\r" |busybox microcom -s 115200 /dev/ttyUSB2 -t 1000 echo -e "AT+CSQ\r" |busybox microcom -s 115200 /dev/ttyUSB2 -t 1000 echo -e "AT+COPS?\r" |busybox microcom -s 115200 /dev/ttyUSB2 -t 1000 echo -e "AT+QCFG=?\r" |busybox microcom -s 115200 /dev/ttyUSB2 -t 1000 # 显示使用频段 echo -e "AT+QNWINFO\r" |busybox microcom -s 115200 /dev/ttyUSB2 -t 1000 echo -e "AT+CREG?\r" |busybox microcom -s 115200 /dev/ttyUSB2 -t 1000 echo -e "AT+QOPSCFG=\"scancontrol\",3\r" |busybox microcom -s 115200 /dev/ttyUSB2 -t 1000 echo -e "AT+QOPS\r" |busybox microcom -s 115200 /dev/ttyUSB2 -t 1000 echo -e 'AT+CCID\r' |busybox microcom -s 115200 /dev/ttyUSB2 -t 1000 echo "AT+CSQ" |busybox microcom -s 115200 /dev/ttyO4 -t 1000 echo -e "AT+CPIN?……
阅读全文
2022年1月11日
iptables NAT规则 NAT表需要的三个链:
1.PREROUTING:可以在这里定义进行DNAT的规则,因为路由器进行路由时只检查数据包的目的ip地址,所以为了使数据包得以正确路由,我们必须在路由之前就进行DNAT;
2.POSTROUTING:可以在这里定义进行SNAT的规则,系统在决定了数据包的路由以后在执行该链中的规则。
3.OUTPUT:定义对本地产生的数据包的DNAT规则。
需要用到的几个动作选项:(真实环境中用大写)
类型 描述 REDIRECT 将数据包重定向到另一台主机的某个端口,通常用实现透明代理和对外开放内网某些服务。 SNAT 源地址转换,改变数据包的源地址 DNAT 目的地址转换,改变数据包的目的地址 MASQUERADE IP伪装,只适用于ADSL等动态拨号上网的IP伪装,如果主机IP是静态分配的,就用SNAT PRERROUTING:DNAT、REDIRECT (路由之前)只支持-i,不支持-o。在作出路由之前,对目的地址进行修改
POSTROUTING:SNAT、MASQUERADE (路由之后)只支持-o,不支持-i。在作出路由之后,对源地址进行修改
OUTPUT:DNAT 、REDIRECT (本机)DNAT和REDIRECT规则用来处理来自NAT主机本身生成的出站数据包.
一、打开内核的路由功能。
1 2 3 [root@localhost]# cat /etc/sysctl.conf net.ipv4.ip_forward=1 [root@localhost]# sysctl -p 二、nat不同动作的配置
MASQUERADE:是动态分配ip时用的IP伪装:在nat表的POSTROUTING链加入一条规则:所有从ppp0口送出的包会被伪装(MASQUERADE) 1 [root@localhost]# iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE SNAT:一般正常共享上网都用的这个。 所有从eth0(外网卡)出来的数据包的源地址改成61.99.28.1(这里指定了一个网段,一般可以不指定)
1 [root@localhost]# iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth0 -j SNAT --to 61.99.28.1 DNAT:目的nat 做智能DNS时会用到 智能DNS:就是客户端在dns项里无论输入任何ip,都会给他定向到服务器指定的一个dnsip上去。
在路由之前所有从eth0(内网卡)进入的目的端口为53的数据包,都发送到1.2.3.4这台服务器解析。
1 [root@localhost]# iptables -t nat -I PREROUTING -i eth0 -p udp --dport 53 -j DNAT --to-destination 1.2.3.4:53 REDIRECT:重定向,这个在透明代理时肯定要用到它 所有从eth1进入的请求80和82端口的数据,被转发到80端口,由squid处理。
1 [root@localhost]# iptables -t nat -A PREROUTING - -i eth1 -p tcp -m multiport --dports 80,82 -j REDIRECT --to-ports 80 三、保存配置规则……
阅读全文
2018年4月26日
先说说需求,原来的业务程序使用单进程多线程结构,守护使用的shell脚本,工作起来倒是没有什么大的问题。直到某处远程升级后出现小小的配置问题,进程运行就死掉,看门狗没人喂,守护脚本又判断不了出了什么问题,只是傻傻的重启。我只好想象着它一遍遍的重启,然后驱车300KM,到现场1分钟解决问题,白白花费了大半日功夫,一路风吹日晒。为了满足自己宅在办公室就能操控世界的伟大理想,我决定想个办法解决一下。最简单的就是自己fork来监控进程状态啦,为了保存旧的兼容性,脚本只允许一个同名进程,只好牺牲下自己,改个名欢快地跑起来。
网上传的最多的就是:
法一:
1 int prctl(PR_SET_NAME, name); 通过这个函数可以将当前进程的名称修改为 name 的内容。高高兴兴的改完,ps一下,名字还是一样的呢……经过一番搜索,/proc/$pid/stat等几个文件里面名字确实变了。某文章看到只有使用 ps -L 才能看到,达不到想要的效果。
法二:
父子进程管理,nginx一直做的很棒,它家的进程名字都自带小尾巴。代码中有名为set_proctitle函数用来修改进程名。一搜果然出来一些分析博文,linux的ps命令实际是以argv[0]处的值来作为进程的title的,因此只需要修改argv[0]处的值即可。原理如下图,一图胜千言。
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 45 #include <stdarg.h>#include <sys/prctl.h>#define MAXLINE 2048 extern char **environ; static char **g_main_argv = NULL; /* pointer to argument vector */ static char *g_main_last_argv = NULL; /* end of argv */ //备份原始变量,以免修改argv[0]的时候覆盖了environ变量 void setproctitle_init(int argc, char **argv, char **envp) { int i; //计算环境变量链表长度,重新申请空间,然后把变量字符串也拷贝过去 for(i = 0; envp[i] != NULL; i++) // calc envp num continue; environ = (char **) malloc(sizeof(char *) * (i + 1)); // malloc envp pointer for(i = 0; envp[i] != NULL; i++) { environ[i] = (char*)malloc(sizeof(char) * strlen(envp[i])); strcpy(environ[i], envp[i]); } environ[i] = NULL; g_main_argv = argv; if(i > 0) g_main_last_argv = envp[i - 1] + strlen(envp[i - 1]); else g_main_last_argv = argv[argc - 1] + strlen(argv[argc - 1]); } void setproctitle(const char *fmt, .……
阅读全文
2015年6月15日
添加永久有效的SSH KEY 虽然ssh-add 命令可以添加key,但是只能保存在当前会话中,如果重启会话,要使用这个可以,就需要重新添加了。我不吐槽这个设计,因为可能有人是会用到的。比如如果key添加多了,又不限定匹配对象,会每一个key都试一下,大大的降低效率。 一个简单的方法就是:配置~/.ssh/config,参考默认配置/etc/ssh/ssh_config
Host github HostName github.com Port 22 User git IdentityFile ~/.ssh/githubKey 如此就能够保存了。要是所有用户都生效就修改/etc/ssh/ssh_config……
阅读全文
2015年6月14日
Welcome to My Blog!本博客由hugo强力驱动.
这个地方要做什么? 其实老早想建个博客什么的,却因为各种懒没能成行。最主要还是自己喜欢并一直写了纸质的日记,于是感觉没有什么有价值的东西能够放在网上,拖延至今,亦步亦趋的开始了这个地方的建设。
我并不打算把日记放在网站上,我还没有勇气展示自己的心灵。那么这里要做什么呢?在了解了一些开源的理念之后,觉得深感赞同。“Open and Free” 我没有细细的思考,版权什么的我也不想掺和。现实之中,我总是羞于与人交往,没有足够的勇气表达自己的心声,害怕没有经过思考的言语伤害到心爱的人。但是即使是这样,我也有一些东西是想要分享给别人的。我喜欢文字,因为可以仔细的斟酌,准确的表达出来。
暂时我也不知道要做些什么,但是呢?“想要找出答案的话,就不应该光用脑袋想。去做你想做的的事,去往你目标的地方只有一条路吗?”所以去做了之后,说不定就能够找到了。……
阅读全文