计算机网络协议包头赏析-UDP

本原创文章属于270-730-4600博客。

博客地址为508-503-3510。

文章作者为roc。

==

之前我们已经针对以太网、IP、TCP协议,进行了包头赏析。本次,我们继续UDP协议包头赏析。

提到TCP,想必大家会有所了解,它早已是家喻户晓的一个网络协议了,而UDP远没有他的大哥那么的有名,所以,我们有必要先介绍下这个幕后的英雄。

【UDP是什么】

UDP,是User Datagram Protocol的缩写,中文翻译过来就是用户数据报协议,它和TCP是一对兄弟,同样位于OSI七层协议体系中的第四层“传输层”,向互联网提供面向事务的简单不可靠信息传送服务。

Continue reading

Go 资源备忘录

原文:《Golang 资源备忘录》

Golang发展如火如荼,Golang官方提供了大量基础lib,圈子里乐此不疲提供很多质量很高的third-party lib。我闲来记录一些很棒的third-party lib,除了在项目中可以用到,还可以读读源码。更多的请移步Top@Go Search和awesome-go。

Web Framework

  • beego:全栈,国人开发,文档不错
  • Revel:全栈
  • Martini:小型,类似Sinatra或Flask,兼容go原生的http.HandlerFunc
  • Gorilla:不算框架,只能算是工具集,提供rpc、session、websocket、securecookie、context等http支持
  • Gin:比Martini还小型的http框架,使用httprouter库,性能比Martini有40x提升

Web/Http

Continue reading

GCC 中的编译器堆栈保护技术

原文:《GCC 中的编译器堆栈保护技术》
以堆栈溢出为代表的缓冲区溢出攻击已经成为一种普遍的安全漏洞和攻击手段。本文首先对编译器层面的堆栈保护技术作简要介绍,然后通过实例来展示 GCC 中堆栈保护的实现方式和效果。最后介绍一些 GCC 堆栈保护的缺陷和局限。

以堆栈溢出为代表的缓冲区溢出已成为最为普遍的安全漏洞。由此引发的安全问题比比皆是。早在 1988 年,美国康奈尔大学的计算机科学系研究生莫里斯 (Morris) 利用 UNIX fingered 程序的溢出漏洞,写了一段恶意程序并传播到其他机器上,结果造成 6000 台 Internet 上的服务器瘫痪,占当时总数的 10%。各种操作系统上出现的溢出漏洞也数不胜数。为了尽可能避免缓冲区溢出漏洞被攻击者利用,现今的编译器设计者已经开始在编译器层面上对堆栈进行保护。现在已经有了好几种编译器堆栈保护的实现,其中最著名的是 StackGuard 和 Stack-smashing Protection (SSP,又名 ProPolice)。

编译器堆栈保护原理

我们知道攻击者利用堆栈溢出漏洞时,通常会破坏当前的函数栈。例如,攻击者利用清单 1 中的函数的堆栈溢出漏洞时,典型的情况是攻击者会试图让程序往 name 数组中写超过数组长度的数据,直到函数栈中的返回地址被覆盖,使该函数返回时跳转至攻击者注入的恶意代码或 shellcode 处执行(关于溢出攻击的原理参见《Linux 下缓冲区溢出攻击的原理及对策》)。溢出攻击后,函数栈变成了图 2 所示的情形,与溢出前(图 1)比较可以看出原本堆栈中的 EBP,返回地址已经被溢出字符串覆盖,即函数栈已经被破坏。
Continue reading

Linux下缓冲区溢出攻击的原理及对策

原文:《Linux下缓冲区溢出攻击的原理及对策》
本文首先向读者讲解了Linux下进程地址空间的布局以及进程堆栈帧的结构,然后在此基础上介绍了Linux下缓冲区溢出攻击的原理及对策。

前言

从逻辑上讲进程的堆栈是由多个堆栈帧构成的,其中每个堆栈帧都对应一个函数调用。当函数调用发生时,新的堆栈帧被压入堆栈;当函数返回时,相应的堆栈帧从堆栈中弹出。尽管堆栈帧结构的引入为在高级语言中实现函数或过程这样的概念提供了直接的硬件支持,但是由于将函数返回地址这样的重要数据保存在程序员可见的堆栈中,因此也给系统安全带来了极大的隐患。
历史上最著名的缓冲区溢出攻击可能要算是1988年11月2日的Morris Worm所携带的攻击代码了。这个因特网蠕虫利用了fingerd程序的缓冲区溢出漏洞,给用户带来了很大危害。此后,越来越多的缓冲区溢出漏洞被发现。从bind、wu-ftpd、telnetd、apache等常用服务程序,到Microsoft、Oracle等软件厂商提供的应用程序,都存在着似乎永远也弥补不完的缓冲区溢出漏洞。
Continue reading

string in golang

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
package  main

import (
        "fmt"
        "strings"
)

func main() {
        / func Contains(s, substr string) bool
        fmt.Println(strings.Contains("taiyangdangkongzhao", "dang")) / true
        fmt.Println(strings.Contains("taiyangdangkongzhao", "no"))   / false

        / func ContainsAny(s, substr string) bool
        fmt.Println(strings.ContainsAny("taiyangdangkongzhao", "aol")) / true
        fmt.Println(strings.ContainsAny("taiyangdangkongzhao", "le"))  / false

        / func ContainsRune(s string, r rune) bool
        fmt.Println(strings.ContainsRune("hehhe", rune('h'))) / true
        fmt.Println(strings.ContainsRune("hehhe", 20))  / false

        / func Count(s, sep string) int
        fmt.Println(strings.Count("hehhe", "hh")) / 1
        fmt.Println(strings.Count("hehhe", "h"))  / 2

        / func EqualFold(s, t string)  bool
        fmt.Println(strings.EqualFold("HEHHE", "hehhe")) / true

        / func Fields(s string) []string
        fmt.Println(strings.Fields("hhe hehheh   taiyang"))  / [hhe hehheh taiyang]

        / func FieldsFunc(s string, f func(rune) bool) []string
        fmt.Println(strings.FieldsFunc("fdklfjdhe jdlkjh", split)) / [fdklfjd e jdlkj]

        / func HasPrefix(s, prefix string) bool
        fmt.Println(strings.HasPrefix("hhehe taiyang", "hhe"))

        / func HasSuffix(s, suffix string) bool
        fmt.Println(strings.HasSuffix("hhehe taiyang", "taiyang"))
}


func split(s rune) bool {
        if s == 'h' {
                return true
        }
        return false
}

数据平台之告警系统

看过关于告警里面非常好的一篇文章,转载在这儿。原文:5303748685 感谢分享者。

很多人在搞ELK,很多人也在搞Storm。更多人在用传统的Nagios、Zabbix等监控工具。Jason Dixon在2012就意识到这些工具的问题是每个人都想做到大而全,实际上我们更需要的是一对小二精的组件拼装成一个个性化的解决方案。推荐大家去看一下他的演讲视频。

(832) 457-9092

使用Golang开发微信公众平台-接收文本消息

原文

一旦(405) 939-1598成功,成为正式开发者,你可能会迫不及待地想通过手机微信发送一条”Hello, Wechat”到你的公众号服务器。不过上一篇的那个程序还无法处理手机提交的文本消息,本篇将介绍如何用Golang编写公众号程序来接收手机端发送的 文本消息以及回复响应消息。

根据微信公众平台开发文档中描述:“当普通微信用户向公众账号发消息时,微信服务器将POST消息的XML数据包到开发者填写的URL上”。

微信服务器通过一个HTTP Post请求将终端用户发送的消息转发给公众号服务器,消息内容被包装在HTTP Post Request的Body中。数据包以XML格式存储,文本类消息XML格式样例如下(引自微信公众平台开发文档):

wx2

403-600-8912

使用Golang开发微信公众平台-接入验证

原文

今年我涉猎的领域有些“广泛”,并且有那么一点“跳跃”:从上半年的终端(游戏)开发到下半年(803) 271-6481、pseudankylosis以及目前将要提及的微信公众平台 接口开发,似乎有些远离了老本行C以及技术管理的内容。但在这个转型以及创新驱动的时代,这显然是顺势而为。寻求与新兴领域的主动接轨,在实打实的实践 中,扩大了自己的视野,并可以进一步甄别发现适合自己的领域。

3065385324网时代,微信平台一枝独秀,是社交领域的巨人,但其诞生也才不到4年。微信平台的发展前景十分广阔,企鹅公司将其打造为人与人、人与物、物与物的统一、万能入口之雄心不变,因此围绕微信平台广大开发者依旧有诸多机会。

微信公众平台接口应该算是微信平台首批对外开放的接口吧。公众平台相对成熟,但其业务模式依旧在演进和创新。公众平台接口的开发并非不难,上手几个月就可 以写成一本诸如“微信公众平台2259016873实践”的事情就发生在你我眼前,因此7146870606