分类: software

  • 终端软件 Tabby Terminal 介绍

    Windows 下的 Terminal  种类比较多,

    最近发现的一款开源的可跨平台使用的终端 Tabby  各种功能很好用,

    之前在 Windows 下面使用最多的是 vandyke 的共享软件  SecureCRT

    缺点是订阅价格挺高,打算逐渐放弃 SecureCRT 转而使用 Tabby

    Putty  也有一部分用户,但是多会话管理功能比较弱,

    微软的 Windows Terminal ,目前功能还不够完善,

    MacOS 和 Linux 操作系统都有自带的 Terminal ,

    MacOS  下 iterm2 也比较流行。

    Tabby 可以备份配置文件,同步至远端服务器,

    这样更换电脑就不需要重新填写配置信息了。

  • tmux 常用命令

    tmux 是一个终端复用软件,类似 GNU/Screen

    基本命令

    tmux new -s session 创建名称为 session 的会话

    tmux ls 会话列表

    tmux kill-session -t session 注销名称为 session 的会话

    tmux a -t  session 进入名称为 session 的会话

    tmux a  进入默认第一个会话

    会话内部命令

    <leader>  为命令前置按键,默认为  <Ctrl + B>

    即在执行任何命令前,需要先按下 <Ctrl + B>

    释放后再按其他键,可通过修改 ~/.tmux.conf 配置来自定义前置按键

    <leader> +  ?   命令清单

    <leader> + c        新建 window

    <leader> + &      关闭 window

    <leader> + n      下一个 window

    <leader> + p       前一个 window

    <leader> + ,       修改 window 名称

    <leader> + d       退出当前会话

    <leader> + $num    切换第 $num 个 window

    <leader> +  “    纵向切割当前 window,变为左右2个pane

    <leader> +  %    横向切割当前 window, 变为上下2个pane

    <leader> +  :source-file ~/.tmux.conf    重载 tmux 配置

    待翻译:

    <leader>+ C-z Suspend the current client
    <leader>+ Space Select next layout
    <leader>+ ! Break pane to a new window
    <leader>+ # List all paste buffers
    <leader>+ $ Rename current session
    <leader>+ &amp; Kill current window
    <leader>+ ' Prompt for window index to select
    <leader>+ ( Switch to previous client
    <leader>+ ) Switch to next client
    <leader>+ , Rename current window
    <leader>+ . Move the current window
    <leader>+ / Describe key binding
    <leader>+ 0 Select window 0
    <leader>+ 1 Select window 1
    <leader>+ 2 Select window 2
    <leader>+ 3 Select window 3
    <leader>+ 4 Select window 4
    <leader>+ 5 Select window 5
    <leader>+ 6 Select window 6
    <leader>+ 7 Select window 7
    <leader>+ 8 Select window 8
    <leader>+ 9 Select window 9
    <leader>+ : Prompt for a command
    <leader>+ ; Move to the previously active pane
    <leader>+ = Choose a paste buffer from a list
    <leader>+ ? List key bindings
    <leader>+ C Customize options
    <leader>+ D Choose a client from a list
    <leader>+ E Spread panes out evenly
    <leader>+ L Switch to the last client
    <leader>+ M Clear the marked pane
    <leader>+ [ Enter copy mode
    <leader>+ ] Paste the most recent paste buffer
    <leader>+ c Create a new window
    <leader>+ d Detach the current client
    <leader>+ f Search for a pane
    <leader>+ i Display window information
    <leader>+ n Select the next window
    <leader>+ o Select the next pane
    <leader>+ p Select the previous window
    <leader>+  q       Display pane numbers
    <leader>+  s       Choose a session from a list     
    <leader>+  t       Show a clock             
    <leader>+  w       Choose a window from a list
    <leader>+  x       Kill the active pane 
    <leader>+  z       Zoom the active pane   
    <leader>+  {       Swap the active pane with the pane above
    <leader>+  }       Swap the active pane with the pane below
    <leader>+  ~       Show messages  
    <leader>+  DC      Reset so the visible part of the window follows the cursor
    <leader>+  PPage   Enter copy mode and scroll up
    <leader>+  Up      Select the pane above the active pane
    <leader>+  Down    Select the pane below the active pane
    <leader>+  Left    Select the pane to the left of the active pane
    <leader>+  Right   Select the pane to the right of the active pane
    <leader>+  M-1     Set the even-horizontal layout
    <leader>+  M-2     Set the even-vertical layout
    <leader>+  M-3     Set the main-horizontal layout
    <leader>+  M-4     Set the main-vertical layout      
    <leader>+  M-5     Select the tiled layout          
    <leader>+  M-n     Select the next window with an alert
    <leader>+  M-o     Rotate through the panes in reverse
    <leader>+  M-p     Select the previous window with an alert
    <leader>+  M-Up    Resize the pane up by 5
    <leader>+  M-Down  Resize the pane down by 5
    <leader>+  M-Left  Resize the pane left by 5
    <leader>+  M-Right Resize the pane right by 5
    <leader>+  C-Up    Resize the pane up                
    <leader>+  C-Down  Resize the pane down
    <leader>+  C-Left  Resize the pane left     
    <leader>+  C-Right Resize the pane right
    <leader>+  S-Up    Move the visible part of the window up
    <leader>+  S-Down  Move the visible part of the window down
    <leader>+  S-Left  Move the visible part of the window left
    <leader>+  S-Right Move the visible part of the window right

    配置文件路径:~/.tmux.conf

    推荐配置  https://github.com/gpakosz/.tmux

    推荐状态栏 statusline 插件 https://github.com/powerline/powerline

    推荐插件管理器  https://github.com/tmux-plugins/tpm

    cheatsheet  https://tmuxcheatsheet.com/

    tmux Guide https://tmuxguide.readthedocs.io/en/latest/tmux/tmux.html

  • Ubuntu 16.04.5 LTS安装lynx

    使用apt安装方式

    apt install lynx

    下载源码安装方式

    安装依赖

    apt install ncurses-dev

    去官方网站下载源码

    访问 https://lynx.invisible-island.net/current/

    wget http://invisible-island.net/datafiles/release/lynx-cur.tar.gz

    tar xzf lynx-cur.tar.gz

    cd lynx2.9.0dev.1

    ./configure

    make

    make install

    安装完毕

    使用

    lynx <url>

    即可显示网页的内容,对于https的访问,需要配置ssl证书。

  • HTTP分析调试工具Fiddler的使用

    Fiddler是什么?

    Fiddler是一个Web调试代理程序,HTTP抓包分析工具,使用它可以分析您的电脑应用和互联网之间的基于HTTP协议的通信数据。通过Fiddler作为中间代理,就可以按需求查看、分析、修改所有的HTTP请求和响应内容。

    为什么在网络编程中需要用到Fiddler?

    日常网站开发中,经常会使用HTTP协议来传输数据,请求数据报文通常由头部参数和用户提交的正文部分按封装协议约定的格式,在TCP连接建立后,发送给远端的服务器,服务器处理完毕把头部信息和处理结果再封装为协议定义的响应格式返回给客户端,实际开发中可能由于两端业务逻辑的复杂性,组装完毕准备传输的最终内容,往往是未知的,此时如果借助Fiddler代理来捕获请求,就可以非常清晰地查看传输内容,同时,Fiddler可以修改发送和接收的数据,方便程序的调试开发。

    Fiddler系统代理示意图

    与Fiddler功能相似的工具还有哪些?

    目前常见的有Charles, Burp Suite, Wireshark, HTTPWatch , Tcpdump。

    Fiddler的安装

    对于操作系统Windows,Linux,MacOS,官方都有支持的版本可供下载。

    下载地址:

    https://www.telerik.com/download/fiddler

    Fiddler配置步骤

    1)Fiddler配置

    打开Fiddler,点击菜单栏Tools->Options…打开选项菜单,切换到Connections选项卡。

    在Fiddler listens on port:的文本框里面输入监听的端口号。

    然后访问 http://127.0.0.1:8883/, 如果想监听其它机器而非本机,选择Allow remote computers to connect为打开状态。

    如果正常打开并显示 Fiddler Echo Service 表明Fiddler监听已经正常工作了(打不开注意防火墙的限制)。

    2)安装Chrome扩展程序 Proxy SwitchyOmega

    安装这个Chrome浏览器的扩展程序,新建一个Fiddler端口的情景模式,就可以设定访问的页面通过Fiddler代理了。

    Chrome浏览器扩展SwitchyOmega添加Fiddler情景模式
    Chrome浏览器扩展SwitchyOmega添加Fiddler情景模式

    配置完成后,点击地址栏后面的SwitchOmeage的插件图标,选择Fiddler就可以了。

    3) 设定Fiddler捕获数据和过滤器

    Fiddler监听过滤设置
    Fiddler监听过滤设置

     

    如果打开的网页比较多,网络比较繁忙,抓取的HTTP会话会很多,设定过滤器可以只捕获特定的会话。

    上图中设定了只捕获www.baidu.com和*.one234.xyz两个域名的HTTP会话。

    如果Fiddler还是没有捕获,则需要注意左下角的设置,打开Capturing和All Processes。

    如果是Windows,需要注意防火墙的设置。

    4 ) 程序中设置Fiddler代理

    如果欲监听的HTTP请求是由程序发起,可以在代码中设置代理,例如

    PHP程序关键代码片段:

    curl_setopt($ch, CURLOPT_HTTPPROXYTUNNEL, TRUE);

    curl_setopt($ch, CURLOPT_PROXY, ‘127.0.0.1:8883’);

    Java程序关键代码片段:

    jre -DproxySet=true -DproxyHost=127.0.0.1 -DproxyPort=8888 MyApp

    shell curl 命令使用Fiddler代理:

    curl –proxy 192.168.199.117:8883 http://demo.one234.xyz/fiddler/fruit.html

    5 ) HTTPS解析

    依次打开Tools->options->HTTPS的选项卡,勾选相应的选项,如下图示例:

    6 ) 手机配置代理

    如果需要监听手机设备HTTP数据,在连接成功的Wi-Fi设置里面可以找到手动HTTP代理,设置代理主机名和端口:

    Android HTTP设置代理图示:

    iPhone HTTP代理设置图示:

    想正常解析HTTPS,还需要安装一个Fiddler的插件CertMaker,来生成证书。

    插件下载地址:https://telerik-fiddler.s3.amazonaws.com/fiddler/addons/fiddlercertmaker.exe

    安装完毕重新启动Fiddler,然后用手机访问http://127.0.0.1:8883,注意127.0.0.1切换为安装了Fiddler的主机的IP

    在页面点击FiddlerRoot Certificate下载证书后安装。

     查看HTTP会话

    配置成功后,就可以在Fiddler的界面看到抓取到的HTTP会话了,如下图:

    Fiddler抓取的HTTP会话列表
    Fiddler抓取的HTTP会话列表

     

    点击左侧每一条会话,就可以在右侧查看会话的所有信息,包括统计信息,会话请求和响应的数据报头和报体,使用的HTTP协议版本,Cookies等,以及使用表单,进制转化,JSON格式化等对数据报的解析查看。

    HTTP会话数据报分析
    HTTP会话数据报分析

    在这里我们可以看到程序发给服务器的原始数据,和服务器处理后返回的原始结果。这样的分析有助于排查问题来源于客户端还是服务端。

    自定义HTTP会话

    1)自定义HTTP请求[Request]

    自定义HTTP会话是指,可以通过Fiddler发起HTTP请求,下图是主动发起请求的例子:

    Fiddler自定义HTTP请求
    Fiddler自定义HTTP请求

    在这里,可以脱离浏览器主动发起HTTP请求,也可以把左侧的会话拖到右侧,然后在原来会话的基础上修改,(在左侧会话上点击右键,选择Replay->Reissue and Edit也可以编辑会话)这样就不依赖应用程序了。可以修改上次发起的请求数据,也就说可以完全绕开代码程序的限制,比如网页上的Javascript校验,复杂的表单构造,数据准备依赖,在实际程序开发测试中,可以忽略繁琐的请求数据构造,大大提高效率。

    2)自定义HTTP响应[Response]

    Fiddler自定义HTTP响应
    Fiddler自定义HTTP响应

    如上图所示,使用AtuoResponder可以自定义每一次会话请求的响应内容,这样,有些请求就不需要发送到远端服务器去处理,直接在本地,按预定的格式返回。比如远程服务器响应太慢,边界条件无法满足,线上生产环境无法返回满足特定条件的数据,需要权限认证等。自定义响应的内容可以指定为一个本地文件,或者设定的HTTP状态码等等。同样对于开发和测试人员,只要掌握使用技巧,可以避免很多因素导致的响应问题。

    想基于左侧的捕获的HTTP会话创建AutoResponder规则,先在左侧用Shift按键多选几条会话,拖动到右边即可。

    重放HTTP请求

    想重新请求某会话,只需要在会话上点击右键,选择Replay->Reissue Request即可。

    Fidder重新发送HTTP请求
    Fidder重新发送HTTP请求

    重放请求很方便,比如在联调时,客户端准备好数据后发起的请求,可以一直保持,不用再重建会话,因为实际开发中一次请求的数据构建可能依赖太多条件和步骤。

    备份和载入HTTP会话

    对于捕获的会话可以备份为文件,发送给其他开发测试人员,方便协助排查问题,也方便后续再次开发。

    实际项目开发中,各个开发人员往往因为沟通和对齐参数花费大量时间,只要把实际请求的数据发送给对方便一目了然知道问题所在。

    Fiddler打包会话
    Fiddler打包会话

    打包后是一个.saz文件,可以使用Fiddler直接打开。

    命令行工具 QuickExec

    ?sometext 按字符查找会话
    =status 按状态码选择过滤会话
    @host 按主机域名搜寻
    bpafter $path 设置中断
    g 取消所有中断
    select image/css/html 快速查找选择
    !listen 8889 监听新端口

    以上介绍了Fiddler对HTTP会话的各种操作,最主要的还是要看懂HTTP协议的数据报格式定义,数据报的body部分是业务互相传递的,对于熟悉业务的的编码人员比较了解,但是数据报的头部内容是独立于应用程序生成的,虽然编码人员本身不过多关注,但是出现问题了还是需要去分析的。Fiddler对HTTP会话的各种操作,让通信数据更加透明,通信过程更加可控,使软件开发调试以及测试更加便利,软件使用也很简单,是一款提高生产效率,简化开发过程不可多得的利器。

    参考文献:

    [1] https://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html

    [2] http://www.telerik.com/fiddler

    [3] http://docs.telerik.com/fiddler/configure-fiddler/tasks/configurefiddler

  • 使用youtube-dl下载youtube视频

    如果想下载youtube上面的视频,可以使用命令行工具youtube-dl

    https://rg3.github.io/youtube-dl/index.html

    在Windows/Linux/MacOS下都可以使用

    下面介绍Ubuntu上使用的方法

    sudo apt-get  install python-pip

    sudo pip install –upgrade youtube_dl

    安装完毕后,youtube-dl 后面跟下载的页面url即可。

    youtube-dl  https://www.youtube.com/watch?v=dtRgI0TG5uM

     

  • 禁止GNU Screen标题栏(hardstatus)动态变化

    由于zsh使用配置https://github.com/robbyrussell/oh-my-zsh的缘故,会导致GNU screen的标题栏(hardstatus)动态随当前操作路径变化,在使用过程中会导致标题栏比较长,只能显示不多几个窗口,要禁止动态变化的话,需要修改下面文件对应的代码

    编辑文件 .oh-my-zsh/lib/termsupport.zsh,注释掉下图所示的行即可。