Jul 27, 2010
在进行网络测试的时候,我们经常需要进行抓包的工作,当然有许多测试工具可以使用,比如sniffer, ethreal等.但最为方便和简单得就非TCPDump莫属. Linux的发行版里基本都包括了这个工具. TCPDump将网络接口设置成混杂模式以便捕获到达的每一个数据包.下面给出TCPDump的部分常用选项:
-i <interface> 指定监听的网络接口
-v 指定详细模式输出详细的报文信息
-vv 指定更详细模式输出更详细的报文信息
-x 指定以16进制数格式显示数据包
-X 规定以ASCII码格式显示输出
-n 规定在捕获过程中不需向DNS查询IP地址
-F <file> 从指定文件中读取表达式
-D 显示可用网络接口
-s <length> 设置捕获数据包的长度
TCPDump的表达式:
默认情况下TCPDump将捕获所有到达网络的数据包.这并不是我们想要的,因此就必须通过表达式来限制不必要的流量,只输出我们需要监听的数据包.
1. 类型限定词
类型限定词有: host, port和net. host用来指定主机或目的地址,port指定端口,net可以用来指定某一子网. 如:
tcpdump ‘port 80′ 监听80端口
tcpdump ‘net 192.168.1′ 监听子网192.168.1.0
tcpdump ‘net 192.168.1.0/24′
2. 逻辑运算符
逻辑运算符有AND,OR和NOT. ()可将多个表达式组合起来.
tcpdump ‘port 80 and (host 192.168.1.10 or host 192.168.1.11)’
监听主机192.168.1.10 或 192.168.1.11的80端口.
3. 传输方向限定词
关键词src指定源地址,dst指定目的地址
tcpdump ‘port 80 and (src 192.168.1.10 or src 192.168.1.11)’
tcpdump ‘dst port 25′
4. 协议限定词
用来捕获特定协议的数据包有: ether(Ethernet), [...]
Apr 7, 2010
1. 查看寄存器
(gdb) i r
(gdb) i r a # 查看所有寄存器(包括浮点、多媒体)
(gdb) i r esp
(gdb) i r pc
2. 查看内存
(gdb) x /wx 0×80040000 # 以16进制显示指定地址处的数据
(gdb) x /8x $esp
(gdb) x /16x $esp+12
(gdb) x /16s 0×86468700 # 以字符串形式显示指定地址处的数据
(gdb) x /24i 0×8048a51 # 以指令形式显示指定地址处的数据(24条)
3. 修改寄存器的值
(gdb) set $v0 = 0×004000000
(gdb) set $epc = 0xbfc00000
4. 修改内存的值
(gdb) set {unsigned [...]
Mar 26, 2010
【Csdn 10月24日 现场报道】10月24日,有Csdn和《程序员》联合主办的代表业界最高水平的技术盛会SD2.0大会进行到了最后一天,在上午,互联网架构师康晓宁向关注架构设计的与会技术人员分享了他多年来的实践心得。
康晓宁的讲演主题很有趣,叫做网站那些事儿,他希望以一种轻松的方式同大家一起交流在架构设计的实践经验。他认为网站只不过是一种特殊的软件,即互联网时代的软件。由于面对的最终用户和市场不同,它的开发呈现出快,猛,糙的特点。对互联网架构师提出更高的需求。
这种高,并不代表需要多么高新的技术,而是架构师针对需求,制定出来合理的架构的能力要求更高。
互联网架构是个年轻的技术领域,互联网架构师面临诸多烦恼。例如,多个层面上的设计,知识面不足;架构设计开发经常要同紧张的时间赛跑;新技术方案和优化手段众多,难以抉择。
随后就是本场课程最有价值的内容康晓宁总结自多年架构实践的互联网架构设计/优化原则。这些原则受到与会学员的极大欢迎。
讲师介绍:康晓宁,Googel软件工程师,清华大学计算机系硕士,曾任清华大学BBS 水木清华站技术站务,供职于数家国内大型网站,从事一线开发和运维工作。
If you enjoyed this post, make sure you subscribe to my RSS feed!
Mar 25, 2010
对于驱动开发来说,设备模型的理解是根本,毫不夸张得说,理解了设备模型,再去看那些五花八门的驱动程序,你会发现自己站在了另一个高度,从而有了一种俯视的感觉,就像凤姐俯视知音和故事会,韩峰同志俯视女下属。
顾名而思义就知道设备模型是关于设备的模型,既不是任小强们的房模,也不是张导的炮模。对咱们写驱动的和不写驱动的人来说,设备的概念就是总线和与其相连的各种设备了。电脑城的IT工作者都会知道设备是通过总线连到计算机上的,而且还需要对应的驱动才能用,可是总线是如何发现设备的,设备又是如何和驱动对应起来的,它们经过怎样的艰辛才找到命里注定的那个他,它们的关系如何,白头偕老型的还是朝三暮四型的,这些问题就不是他们关心的了,而是咱们需要关心的。在房市股市千锤百炼的咱们还能够惊喜的发现,这些疑问的中心思想中心词汇就是总线、设备和驱动,没错,它们就是咱们这里要聊的Linux设备模型的名角。
总线、设备、驱动,也就是bus、device、driver,既然是名角,在内核里都会有它们自己专属的结构,在include/linux/device.h里定义。
52 struct bus_type {
53 const char * name;
54 struct module * owner;
55
56 struct kset [...]
Mar 25, 2010
本方法适用于Android SDK 2.1环境下的程序开发
2010-03-24
安装JDK
• 在java.sun.com下载JDK并安装
• 在“系统属性”的“高级”选项卡中点击“环境变量”,然后添加如下系统环境变量:
1. 在PATH环境变量后追加 JDK安装路径中的bin路径,本机为
C:\Program Files\Java\jdk1.6.0_18\bin
2. 新建CLASSPATH环境变量或在CLASSPATH环境变量后追加JDK安装路径中的lib路径和demo路径,本机为
C:\Program Files\Java\jdk1.6.0_18\demo;C:\Program Files\Java\jdk1.6.0_18\lib
安装Eclipse
• 在eclipse.org下载Eclipse IDE for Java Developers的Windows 32bit版本
• 下载完成后解压即可使用
安装Android SDK OR 离线安装
• 在Android Developers下载android-sdk_r05-windows.zip,下载完成后解压到任意路径
• 运行SDK Setup.exe,点击Available Packages,如果没有出现可安装的包请点击Settings,选中Misc中的”Force https://…”这项,再点击Available Packages
• [...]
Mar 25, 2010
在Oracle收购Sun Microsystems之后,Java之父James Gosling首度在公开场合露面,他一如既往保持着对Java的高度关注,并表示Java在Oracle的掌管下令人放心,随后他还透露了Java的发展方向。
Gosling是在TheServerSide Java Symposium上发表这份公开说明的,当时他的报告主题是Java Today and Tomorrow。他表示目睹了Oracle掌舵Java的方向之后,他深受鼓舞,Java的未来不需要担忧,关于Java的运营以及其技术的发展仍在向着有利的方向继续。
Gosling还公布了一份最新的Java报告,比如JRE (Java Runtime Environment)的每周下载量为1500万;共有100亿个Java-enabled的应用;10亿个Java-enabled的桌面;一亿个Java-enabled的TV设备;26亿个Java-enabled的移动设备;55亿个Java智能卡以及超过650万名Java开发者。
尽管目前大家看到的大多是Oracle在企业端Java的努力,但Gosling表示,Oracle同样也在致力于Java在桌面端、嵌入式、移动领域、高性能计算机及其他系统方面的发展。他说,所有这一切的原则是网络,网络将这些应用和功能链接。
谈到企业端Java,Gosling表示Java EE 6 (Java Platform, Enterprise Edition 6)将是下一代企业软件的基础, Java社区及许多开发者在2009年11月促使了Java EE 6 specification的认可,并发布和升级了一些Java API,Gosling对此表示感谢。
Gosling表示,Java EE 6以模块化为中心,引入了profiles的概念,但是有两个profiles,一个是full profile,另一个是Web profile。Web profile是第一个被定义的Java EE profile,对于现代Web应用开发它是一个功能全面的中型堆栈。
Gosling还提到了Java EE 6 specification中新增的依赖注入(dependency injection)特性。依赖注入可以允许你在代码中注入依赖,你将可以使用JDK 5 [Java Development Kit 5]中的注释特性来析出模板代码[boilerplate],从而EJB [Enterprise JavaBeans]的麻烦一扫而光。有趣的是,就在几年前这些问题还是Java社区内争论的焦点呢。
同时,Gosling宣布了GlassFish应用服务器的升级新版本为Version 3,它也是Java EE 6的参考实现(reference implementation)。GlassFish是全球最流行的下载型应用服务器,每个月的下载量为100万。
另外,Gosling表示Oracle也在积极推进NetBeans IDE,使它积极运用到企业端、移动领域和桌面端开发。
Java很棒的一点是他是一个two-level specification,既是Java语言,同时它的魔力在于VM [virtual machine]以及它可以支持包括Scala, Ruby, Groovy, Python, PHP, JavaScript, JavaFX在内的上百种其他语言。
展望Java语言接下来的五到十年,Gosling表示开发者应当寻求稳定的、逐渐增强的语言,因为这样的语言能够促进开发者的进步。
Sun曾在2009年的时候高调宣布了Java [...]
Mar 25, 2010
void GetMemory(char *p)
{
p=(char*)malloc(100);
}
void Test(void)
{
char *str = NULL;
GetMemory(str);
strcpy(str,”helloworld”);
printf(str);
}
请问运行Test函数会有什么样的结果?
答:程序崩溃。因为GetMemory并不能传递动态内存,Test函数中的str一直都是NULL。strcpy(str,”helloworld”);将使程序崩溃。
char *GetMemory(void)
{
char p[]=”helloworld”;
return p;
}
void Test(void)
{
char *str = NULL;
str = GetMemory();
printf(str);
}
请问运行Test函数会有什么样的结果?
答:可能是乱码。因为GetMemory返回的是指向“栈内存”的指针,该指针的地址不是NULL,但其原先的内容已经被清除,新内容不可知。
void GetMemory2(char **p, int num)
{
*p = (char*)malloc(num);
}
void Test(void)
{
char *str = NULL;
GetMemory(&str, 100);
strcpy(str, “hello”);
printf(str);
}
请问运行Test函数会有什么样的结果?
答:(1)能够输出hello(2)内存泄漏
以上都是关于内存的问题,我想问第一个为什么说GetMemory不能传递动态内存,而第三个 GetMemory2(char **p, int num)却可以;还有第二个说GetMemory返回的是指向“栈内存”的指针,该指针的地址不是NULL,总之我不懂,最好懂得人能一句一句的解释。
If you enjoyed this post, make sure you subscribe to my RSS feed!
Mar 23, 2010
有时候使用rm命令的时候觉得有个删除提示比较保险;但真的加上了,
在使用的大多数时候又觉得比较麻烦。这其实可通过rm的-i选项来控制的.
以下是用rm –help命令查出来的
用法:rm [选项]… 文件…
删除 (unlink) 文件。
-f, –force 强制删除。忽略不存在的文件,不提示确认
-i 在删除前需要确认
-I 在删除超过三个文件或者递归删除前要求确认。此选项比-i 提
示内容更少,但同样可以阻止大多数错误发生
–interactive[=WHEN] 根据指定的WHEN 进行确认提示:never,once (-I),
或者always (-i)。如果此参数不加WHEN 则总是提示
–one-file-system 递归删除一个层级时,跳过所有不符合命令行参
数的文件系统上的文件
[...]
Mar 23, 2010
asmlinkage long sys_nice(int increment)
“asmlinkage” 是在 i386 system call 实作中相当重要的一个 gcc 标签(tag)。
当 system call handler 要呼叫相对应的 system call routine 时,便将一般用途暂存器的值 push 到 stack 里,因此 system call routine 就要由 stack 来读取 system call handler 传递的参数。这就是 asmlinkage 标签的用意。
system call handler 是 assembly code,system call routine(例如:sys_nice)是 C code,当 assembly code 呼叫 C function,并且是以 stack 方式传参数(parameter)时,在 C [...]
Mar 23, 2010
背景
项目的 自动化测试中已经使用了基于Python 脚本的框架,自动化过程中最关键的问题就是如何实现桩模块。运用 Python 强大的功能,实现任何桩模块都是可能的,但是是否必须完全使用 Python 实现模块逻辑,成本是一个决定性因素。在桩模块逻辑简单的情况下,使用 Python 模拟模块逻辑不但使自动化测试的结构清晰,也具有更好的灵活性,但是如果桩模块逻辑复杂,实现起来可能要耗费很大的成本,也容易由于桩模块逻辑与实际不符导致测试结果不可信。在这种情况下,如果能够借用 RD 开发的某些代码段 / 库,将会对测试自动化带来很多效益。
另外,在Python 中调用 C/C++ 代码的方法也可能应用于 C/C++ 库的测试中,这种测试方法的可行性还有待研究。
以下总结出几种在Python 中调用 C/C++ 代码的方法
使用ctypes 模块调用 C 动态库
从Python2.5 开始, Python 开始提供 ctypes 模块来提供对 C 语言编译的动态库文件的调用。注意, 这里特指C 的动态库 ,用C++ 编译的动态库 ctypes 虽然能够加载,但调用时的函数名已经由于 C++ 的重载特性被加以修改,难以调用。 使用 ctypes 调用 C 动态库的好处在于不用进行额外的开发,可以直接使用编译好的动态库。 ctypes 提供了完整的 C 类型封装,也支持自定义类型,大大减少在调用过程中的工作量。 ctypes 的使用很简单,只需熟悉 python 封装与 C [...]