kaldi安装

为了省去安装的麻烦,我直接使用的是容器版本的kaldi https://hub.docker.com/r/kaldiasr/kaldi docker pull kaldiasr/kaldi This is the official Docker Hub of the Kaldi project: http://kaldi-asr.org Kaldi offers two sets of images: CPU-based images and GPU-based images. Daily builds of the latest version of the master branch (both CPU and GPU images) are pushed to DockerHub. Sample usage of the CPU based images: docker run -it kaldiasr/kaldi:latest Sample usage of the GPU based images: Note: use nvidia-docker to run the GPU images. docker run -it --runtime=nvidia kaldiasr/kaldi:gpu-latest Please refer to Kaldi's GitHub repository for more details. kaldiasr/kaldi这个镜像是基于linuxkit构建的,如果缺少什么包,可以使用apt命令在容器中安装 ...

2020-05-12 15:40:02 · 1 min · Eddie Wang

Type 'Timeout' is not assignable to type 'number'

let timer:NodeJS.Timer; timer = global.setTimeout(myFunction, 1000); 参考http://evanshortiss.com/development/nodejs/typescript/2016/11/16/timers-in-typescript.html

2020-05-12 15:35:54 · 1 min · Eddie Wang

macbook 清空DNS缓存

sudo killall -HUP mDNSResponder

2020-05-11 17:40:48 · 1 min · Eddie Wang

xmpp学习

2020-05-08 11:09:53 · 0 min · Eddie Wang

从pcap文件提取转wav语音文件

wireshark具有这个功能,但是并不适合做批量执行。 下面的方案比较适合批量执行。 # 1. 安装依赖 yum install gcc libpcap-devel libnet-devel sox -y # 2. 克隆源码 git clone https://github.com/wangduanduan/rtpsplit.git # 3. 切换目录 cd rtpsplit # 4. 编译可执行文件 make # 5. 将可执行文件复制到/usr/local/bin目录下 cp src/rtpbreak /usr/local/bin # 6. 切换到录音文件的目录,假如当前目录只有一个文件 rtpbreak -r krk9hprvin1u1laqe14g-8beffe8aaeb9bf99.pcap -g -m -d ./ audio git:(edge) ✗ rtpbreak -r krk9hprvin1u1laqe14g-8beffe8aaeb9bf99.pcap -g -m -d ./ + rtpbreak v1.3a running here! + pid: 1885, date/time: 01/05/2020#09:49:05 + Configuration + INPUT Packet source: rxfile 'krk9hprvin1u1laqe14g-8beffe8aaeb9bf99.pcap' Force datalink header length: disabled + OUTPUT Output directory: './' RTP raw dumps: enabled RTP pcap dumps: enabled Fill gaps: enabled Dump noise: disabled Logfile: './/rtp.0.txt' Logging to stdout: enabled Logging to syslog: disabled Be verbose: disabled + SELECT Sniff packets in promisc mode: enabled Add pcap filter: disabled Expecting even destination UDP port: disabled Expecting unprivileged source/destination UDP ports: disabled Expecting RTP payload type: any Expecting RTP payload length: any Packet timeout: 10.00 seconds Pattern timeout: 0.25 seconds Pattern packets: 5 + EXECUTION Running as user/group: root/root Running daemonized: disabled * You can dump stats sending me a SIGUSR2 signal * Reading packets... open di .//rtp.0.0.txt ! [rtp0] detected: pt=0(g711U) 192.168.40.192:26396 => 192.168.60.229:20000 open di .//rtp.0.1.txt ! [rtp1] detected: pt=0(g711U) 10.197.169.10:49265 => 192.168.60.229:20012 * eof reached. -- Caught SIGTERM signal (15), cleaning up... -- * [rtp1] closed: packets inbuffer=0 flushed=285 lost=0(0.00%), call_length=0m12s * [rtp0] closed: packets inbuffer=0 flushed=586 lost=0(0.00%), call_length=0m12s + Status Alive RTP Sessions: 0 Closed RTP Sessions: 2 Detected RTP Sessions: 2 Flushed RTP packets: 871 Lost RTP packets: 0 (0.00%) Noise (false positive) packets: 8 + No active RTP streams # 7. 查看输出文件 -rw-r--r--. 1 root root 185K May 1 09:22 krk9hprvin1u1laqe14g-8beffe8aaeb9bf99.pcap -rw-r--r--. 1 root root 132K May 1 09:49 rtp.0.0.pcap -rw-r--r--. 1 root root 92K May 1 09:49 rtp.0.0.raw -rw-r--r--. 1 root root 412 May 1 09:49 rtp.0.0.txt -rw-r--r--. 1 root root 52K May 1 09:49 rtp.0.1.pcap -rw-r--r--. 1 root root 33K May 1 09:49 rtp.0.1.raw -rw-r--r--. 1 root root 435 May 1 09:49 rtp.0.1.txt -rw-r--r--. 1 root root 1.7K May 1 09:49 rtp.0.txt # 8. 使用sox 转码以及合成wav文件 sox -r8000 -c1 -t ul rtp.0.0.raw -t wav 0.wav sox -r8000 -c1 -t ul rtp.0.1.raw -t wav 1.wav sox -m 0.wav 1.wav call.wav # 最终合成的 call.wav文件,就是可以放到浏览器中播放的双声道语音文件 参考 rtpbreak帮助文档 Copyright (c) 2007-2008 Dallachiesa Michele <micheleDOTdallachiesaATposteDOTit> rtpbreak v1.3a is free software, covered by the GNU General Public License. USAGE: rtpbreak (-r|-i) <source> [options] INPUT -r <str> Read packets from pcap file <str> -i <str> Read packets from network interface <str> -L <int> Force datalink header length == <int> bytes OUTPUT -d <str> Set output directory to <str> (def:.) -w Disable RTP raw dumps -W Disable RTP pcap dumps -g Fill gaps in RTP raw dumps (caused by lost packets) -n Dump noise packets -f Disable stdout logging -F Enable syslog logging -v Be verbose SELECT -m Sniff packets in promisc mode -p <str> Add pcap filter <str> -e Expect even destination UDP port -u Expect unprivileged source/destination UDP ports (>1024) -y <int> Expect RTP payload type == <int> -l <int> Expect RTP payload length == <int> bytes -t <float> Set packet timeout to <float> seconds (def:10.00) -T <float> Set pattern timeout to <float> seconds (def:0.25) -P <int> Set pattern packets count to <int> (def:5) EXECUTION -Z <str> Run as user <str> -D Run in background (option -f implicit) MISC -k List known RTP payload types -h This

2020-05-01 09:36:26 · 3 min · Eddie Wang

娱乐智障

娱乐至死,娱乐也能让人变得智障。 贪图于精神愉悦,在永无休止的欢悦中难以自拔。 道德经上写道:五色令人目盲,五音令人耳聋,五味令人口爽,驰骋田猎令人心发狂。 现代人尤其如此。买分辨率最高的显示器,刷新频率最高的手机,买最贵的耳机,吃口味最为劲爆的火锅。 感觉人都已经被五官所控制,变成了一个行尸走肉的躯壳。 但是话又说回来,人为什么要这要麻痹自己呢? 或许变成一个智障,才能稍微从现实的夹缝中稍微缓口气。 冷风如刀,以大地为砧板,视众生皆为鱼肉。

2020-04-28 21:56:52 · 1 min · Eddie Wang

自动IP拦截工具fail2ban使用教程

简介 如果你的主机在公网上有端口暴露出去,那么总会有一些不怀好意的家伙,会尝试通过各种方式攻击你的机器。常见的服务例如ssh, nginx都会有类似的威胁。 手工将某个ip加入黑名单,这种操作太麻烦,而且效率低。而fail2ban就是一种自动化的解决方案。 fail2ban工作原理 fail2ban的工作原理是监控某个日志文件,然后根据某些关键词,提取出攻击方的IP地址,然后将其加入到黑名单。 fail2ban安装 yum install fail2ban -y # 如果找不到fail2ban包,就执行下面的命令 yum install epel-release # 安装fail2ban 完成后 systemctl enable fail2ban # 设置fail2ban开机启动 systemctl start fail2ban # 启动fail2ban systemctl status fail2ban # 查看fail2ban的运行状态 用fail2ban保护ssh fail2ban的配置文件位于/etc/fail2ban目录下。 在该目录下建立一个文件 jail.local, 内容如下 bantime 持续禁止多久 maxretry 最大多少次尝试 banaction 拦截后的操作 findtime 查找时间 看下下面的操作的意思是:监控sshd服务的最近10分钟的日志,如果某个ip在10分钟之内,有2次登录失败,就把这个ip加入黑名单, 24小时之后,这个ip才会被从黑名单中移除。 [DEFAULT] bantime = 24h banaction = iptables-multiport maxretry = 2 findtime = 10m [sshd] enabled = true 然后重启fail2ban, systemctl restart fail2ban fail2ban提供管理工具fail2ban-client **fail2ban-client status **显示fail2ban的状态 **fail2ban-client status sshd **显示某个监狱的配置。从下文的输出来看可以看出来fail2ban已经拦截了一些IP地址了 > fail2ban-client status Status |- Number of jail: 1 `- Jail list: sshd > fail2ban-client status sshd Status for the jail: sshd |- Filter | |- Currently failed: 2 | |- Total failed: 23289 | `- Journal matches: _SYSTEMD_UNIT=sshd.service + _COMM=sshd `- Actions |- Currently banned: 9 |- Total banned: 1270 `- Banned IP list: 93.174.93.10 165.22.238.92 23.231.25.234 134.255.219.207 77.202.192.113 120.224.47.86 144.91.70.139 90.3.194.84 217.182.89.87 fail2ban保护sshd的原理 fail2ban的配置文件目录下有个filter.d目录,该目录下有个sshd.conf的文件,这个文件就是对于sshd日志的过滤规则,里面有些正常时用来提取出恶意家伙的IP地址。 ...

2020-04-28 08:48:11 · 9 min · Eddie Wang

Linux进程和线程

思考题:当你用ssh登录到一个linux机器,并且执行了某个hello.sh之后,有哪些进程参与了该过程? linux系统架构 kernel mode user mode 内核态和用户态的区别 什么是进程 进程是运行的程序 process 是对 processor 虚拟化,通过时间片 进程都有uid nginx访问某个目录,Permission denied 进程都有pid $$ 进程都有父进程 准确来说,除了pid为0的进程之外,其他进程都有父进程 有时候,你用kill命令杀死了一个进程,但是立马你就发现这个进程又起来了。你就要看看,这个进程是不是有个非init进程的父进程。一般这个进程负责监控子进程,一旦子进程挂掉,就会去重新创建一个进程。所以你需要找到这个父进程的Id,先把父进程kill掉,然后在kill子进程。 进程是一棵树 #!/bin/bash echo "pid is $$" times=0 while true do sleep 2s; let times++; echo $times hello; done ➜ ~ pstree 24601 sshd─┬─3*[sshd───zsh] ├─sshd───zsh───pstree └─sshd───zsh───world.sh───sleep 进程都有生命周期 创建 销毁 进程都有状态 runing 进程占用CPU, 正在执行指令 ready 进程所有需要的资源都已经就绪,等待进入CPU执行 blocked 进程被某些事件阻断,例如IO。 进程的状态转移图 ...

2020-04-25 20:30:18 · 7 min · Eddie Wang

老年生活

最近感觉提前步入老年生活,晚上九点睡觉,早上六点醒来。醒来之后打盹一会,等着按灭六点十分的闹钟。 哎,又困了。😩😩😩😩😩😩

2020-04-23 21:18:22 · 1 min · Eddie Wang

简历之吃苦耐劳

最近需要招个前端开发,我更想让他向Nodejs方面发展。 简历看的眼花,不知道为什么有那么多人都在简历上写吃苦难耐,难道做前端开发真的需要吃苦耐劳吗? 我在NPM上没有找到能收邮件的包,找到了发邮件的包。 我想找个能收邮件的包,自动收邮件,自动分析和过滤一些不想看的简历。

2020-04-23 21:06:33 · 1 min · Eddie Wang