2014-03-03

未备案域名的 HTTP 请求拦截

在国内使用域名搭建网站必须要备案,如果使用未备案的域名进行服务几小时内就会被封掉, 那么功夫网是基于什么原理进行封禁的呢?下面分析一下: 首先我们看一下正常情况下 HTTP 请求流程, 如下图所示: 未备案域名使用 Chrome 访问时可以看到如下所示的错误提示: 其中ERR_CONNECTION_ABORTED 意思是说 TCP 连接被中断了。 现在开始在服务端和客户端分别抓包, 对 TCP 数据包进行分析然后继续定位 TCP 断开连接的原因,如下图所示 x.16 是服务端 IP, x.67 是客户端 IP 从如上两个数据包截图分析中可以发现当客户端发起 HTTP GET 请求后, 客户端和服务器端分别收到了很多“对端”发过来的 RST 数据包, 这就是导致 TCP 断开连接的主要原因。这些 RST 数据库很有可能就是中间的网络设备发送过来的。 问:为什么当客户端发送 GET 请求之后才开始发送 RST,而不是 TCP 建立连接的时候进行干扰? 答: 如下图所示, 当客户端发起 GET 请求之后会在 HTTP 的 header 里面带上要请求的域名, 这时候服务器端才能知道想要请求的是哪个域名的服务,同理这时候功夫网也知道了你想要访问的是哪个域名, 如果发现没有备案就进行 RST 干扰。 思考:这个情况可以避免吗? 答:如果使用 HTTPS 方式提供服务可以避免, 因为 HTTPS 请求的时候 HTTP 的 header 部分是加密的, xxx 就不知道请求的是哪个域名了,如下图所示, Google 现在就是这么做的:

2017-06-22

友情链接

大漠穷秋 志文工作室 huangz 阿里核心系统 sneezry 依云 陈庆 灿哥 微度网络 go 代码片段 峰云就她了

2015-11-04

Mac 开机启动配置

几处可以配置开机启动的位置 Unix系统级别的启动脚本 /etc/mach_init.d/ /etc/mach_init_per_user.d/ /etc/mach_init_per_login_session.d/ 在这3个目录下面的启动脚本将在系统初始化阶段执行 OSX级别启动脚本 /System/Library/StartupItems/ ~/Library/StartupItems/ OSX级别启动后台进程 /Library/LaunchAgents/ /Library/LaunchDaemons/ ~/Library/LaunchAgents/ ~/Library/LaunchDaemons/ 用户级别启动程序 系统偏好设置 -> 帐户 -> 登录项 用户登录时启动配置 除了上述几处可以配置以外还可以通过 defaults 进行配置, 例如如下步骤所示: 在一个自定义的目录中, 比如 /opt/script/ 中添加 startup.sh 文件 编写 startup.sh 启动脚本 运行 sudo defaults write com.apple.loginwindow LoginHook /opt/script/startups.sh 上述配置过程需要注意: /opt/script/ 不能在 home 目录下

2015-08-02

Mac Tips

屏幕截图 系统软件截图 Cmd+Shift+3:全屏截图;截取整个屏幕,保存截图至桌面文件夹。 Cmd+Shift+4:区域截图;鼠标光标变成带坐标的小十字,通过拖拽截取特定区域,保存截图至桌面文件夹。 Cmd+Shift+4 - 单击空格键 - 鼠标单击指定窗口:窗口截图;出现小十字光标后对指定窗口按空格键,鼠标光标变成照相机,鼠标单击截取指定窗口,保存截图至桌面文件夹。 进阶快捷键 Cmd+Shift+4 - 按住空格键拖动鼠标:区域截图;选取区域范围后,按住空格键并拖到鼠标可移动选取范围,释放按键后保存截图至桌面文件夹。 Cmd+Shift+4 - 按住Shift - 上下/左右移动鼠标:区域截图;选取区域范围后,按住 Shift 并上下/左右移动鼠标即可固定选取范围宽度/高度改变高度/宽度,释放按键后保存截图至桌面文件夹。 Cmd+Shift+4 - 按住Shift和Option: 区域截图;选取区域范围后,按住 Shift 和 Option 键在上一快捷键功能的基础上自由切换高度宽度,释放按键后保存截图至桌面文件夹。 Cmd+Shift+4 - 按住Option: 区域截图;选取区域范围后,按住 Option 键可按比例缩放选取范围,释放按键后保存截图至桌面文件夹。 PS:以上介绍的快捷键配合按住 Control 键即可将截图文件保存在剪切板,以供调用。 利用终端截图 终端截图 还有比较 Geek 的方法就是通过终端(Terminal)命令来截图,终端截图命令screencapture 有十多种参数可以选择,比如截图后立即显示、消除截图声音、延迟数秒后截图等。有兴趣的读者可以通过下面这条命令查看各个参数的具体使用方法。(运行结果即本文配图) screencapture -h Skitch(圈点) 截图快捷键 一些有用的快捷键如下所示: 截图 十字截图:Shift-Command-5 全屏截图:Shift-Command-6 窗口截图:Shift-Command-W 相机快照:Shift-Command-T 注释 箭头:Option+Command+A 文字:Option+Command+T 方框:Option+Command+R 圆角方框:Option+Command+U 椭圆:Option+Command+O 直线:Option+Command+L 标注:Option+Command+M 高亮: Option+Command+I 像素化:Option+Command+X 裁剪/调整:Option+Command+K 工具尺寸:Option+Command+1到Option+Command+5 ... Read more

2015-07-27

为什么要用 systemd 替换 Sysvinit

目录 序 Sysvinit 示例 systemd 介绍 systemd 特点 systemd 必知必会 序 在 CentOS 6 之前的版本, 如果想要开机启动某些系统服务, 比如 Apache 、MySql 之类的服务, 那就需要编写 init 脚本才能实现. 而在 CentOS 7 中, 不再使用 init , 而是使用 systmed 的方式管理系统服务. 那么为什么要换成 systemd 呢? 换成 systemd 需要注意什么呢? systemd 都有哪几部分组成呢? 接下来我们先来看一个 init 启动脚本, 然后在介绍一下 systemd , 对比一下 systemd 是如何管理系统服务的. Sysvinit 介绍 运行级别的配置 Sysvinit 管理的系统有一个启动级别的概念, 默认的启动级别有 0-6 七个级别. # 0 - 停机 # 1 - 单用户模式 # 2 - 多用户,但是没有NFS # 3 - 完全多用户模式 # 4 - 没有用到 # 5 - X11 # 6 - 重新启动(千万不要把initdefault设置为6 ) 一个运行级别其实就相当于定义一组启动脚本, 在每一个运行级别下分别启动什么服务. ... Read more

2015-07-24

在本地搭建一个 etcd 集群

目录 基本概念 CoreOS/etcd/ 在本地构建一个 CoreOS 集群 初始化 etcd 参考文献 基本概念 CoreOS/etcd/ CoreOS 是一个基于 Docker 的轻量级容器化 Linux 发行版,专为大型数据中心而设计,旨在通过轻量的系统架构和灵活的应用程序部署能力简化数据中心的维护成本和复杂度。大多数 Linux 发行版自带很多软件包,有些包在服务部署时并不需要。 CoreOS 将不需要的统统裁掉,只保留系统核心,同时支持通过 Docker 按需创建应用容器。 CoreOS 提供 etcd (用于服务发现和配置管理的高可用、分布式键值存储服务)和 fleet (基于 etcd 和 fleet. etcd 提供分布式初始化服务,systemd 提供服务的管理功能)两个工具。有了 CoreOS 和这些工具,就可以对集群系统而非单个主机执行所希望的操作。 本文主要介绍 如何搭建一个 etcd 集群 etcd 是一个高可用的键值存储系统,主要用于共享配置和服务发现。etcd 是由 CoreOS 开发并维护的,灵感来自于 ZooKeeper 和 Doozer,它使用 Go 语言编写,并通过 Raft 一致性算法处理日志复制以保证强一致性。 在分布式系统中,如何管理节点间的状态一直是一个难题,etcd 像是专门为集群环境的服务发现和注册而设计,它提供了数据 TTL 失效、数据改变监视、多值、目录监听、分布式锁原子操作等功能,可以方便的跟踪并管理集群节点的状态。 更多关于 etcd 的介绍参见 这里 构建一个本地集群 本文通过CoreOS 官方在 github 上面有一个项目, 见这里. 这是一个 Vagrant 项目, 根据 github 上面说明文档的步骤操作可以在本地安装部署并启动 3 个 CoreOS 虚拟机. ... Read more

2015-07-24

部署一个 hello word fleet 集群

目录 fleet 介绍 fleet 集群依赖介绍 部署 etcd 集群 fleet 使用示例 参考文献 fleet 介绍 fleet 集群组成部分 fleet 集群主要由 etcd 集群 fleed 守护进程和 Systemd 组成, 其中: * etcd 主要用户集群共享配置和服务发现功能, fleetd 进程通过 etcd 通信 * systemd 主要用于服务的管理包括: 启动 停止 重启等功能 * fleet 主要是通过 etcd 向其他 fleet 发送指令, 决策从哪个 fleet 节点启动服务等功能 如上述可知, 我们需要安装 fleet 、etcd 和 systemd 才能使用, 因为我们是采用的 CoreOS 系统,所以不用担心, CoreOS 默认已经安装了上述软件. 但是默认 etcd 是没有构成集群的, 所以我们需要创建一个 etcd集群 fleet 其实是通过 etcd 来构建集群的, 所以要先搭建一个 etcd 的集群才能通过 fleet 控制集群设备. ... Read more

2015-07-19

使用 CoreOS Docker 搭建 WordPress

目录 说明 创建 ECS 启动 MySql 容器 启动 WordPress 容器 参考文献 说明 本 Blog 基于 Docker 搭建, 下面介绍搭建过程. WordPress Docker CoreOS 和 阿里云 ECS 相信大家都知道了, 本文采用阿里云 ECS 搭建一个 WordPress 站点 创建 ECS 打开阿里云 ECS 产品页, 点击购买即可看到如下所示页面, 选择适合自己的配置付款之后即可创建一个 ECS. 本文采用美国硅谷的 ECS 启动 MySql 容器 参见 MySql 镜像 文档, 你会发现 MySql 镜像默认是不会保存数据库文件到容器中的. 之所以这样设计是为了多个 MySql 容器可以共用数据. 所以本文使用了外挂券的方式共享数据库文件, 使用如下命令启动 MySql 容器 docker run --name jike.me-mysql -v /root/jike.me/var/lib/mysql:/var/lib/mysql -v /root/jike.me/:/var/data/backup -e MYSQL_ROOT_PASSWORD=xxx -d mysql –name 表示创建一个命名容器, 容器的名字是 jike. ... Read more

2015-04-26

PhantomJS 介绍

目录 PhantomJS 是什么 PhantomJS 能做什么 安装 hello world 自动投票示例介绍 PhantomJS 是什么 官方首页 简单的来说 PhantomJS 就是一个无界面的 webkit. 官方介绍如下 PhantomJS is a headless WebKit scriptable with a JavaScript API. It has fast and native support for various web standards: DOM handling, CSS selector, JSON, Canvas, and SVG. 此货再配合 phantomjs-node 就可以无缝的使用 nodejs 的功能. 可谓异常强大. PhantomJS 能做什么 官网有很多示例 我在这里列举一些: web 页面截图 web 页面保存成 pdf 抓取 web 页面内容 可以使用 JQuery 等前端框架无缝操作 web 页面 可以使用 JS 模拟人工操作 web 页面,比如进行网络投票(通过代理更换 IP) 可以进行 web 页面测试 安装 PhantomJS 的安装也是极其简单, 几乎没有依赖, 如果批量部署可以使用 rpm 实现. ... Read more

2015-04-26

reveal.js 开机启动

#cat reveal.conf start on stopped rc RUNLEVEL=[2345] respawn exec python /root/jike/work/github/reveal.js/l-start.py >/dev/null 2>&1