博文

交换环境下的Sniffer(转)(2009-04-17 09:50:00)

摘要:通常在局域网环境中,我们都是通过交换环境的网关上网的,在交换环境中使用NetXray或者NAISniffer一类的嗅探工具除了抓到自己的包以外,是不能看到其他主机的网络通信的。但是我们可以通过利用ARP欺骗可以实现Sniffer的目的。ARP协议是将IP解析为MAC地址的协议,局域网中的通信都是基于MAC的。例如下面这样的情况:在局域网中192.168.0.24和192.168.0.29都是通过网关192.168.0.1上网的,假定攻击者的系统为192.168.0.24,他希望听到192.168.0.29的通信,那么我们就可以利用ARP欺骗实现。1、首先告诉192.168.0.29,网关192.168.0.1的MAC地址是192.168.0.242、告诉192.168.0.1,192.168.0.29的MAC地址是192.168.0.24。这样192.168.0.29和192.168.0.1之间的数据包,就会发给192.168.0.24,也就是攻击者的机器,这样就可以听到会话了。但是这么做的有一个问题,192.168.0.29发现自己不能上网了,因为原来发给192.168.0.1的数据包都被192.168.0.24接收了,而并没有发给网关192.168.0.1。这时候192.168.0.24设置一个包转发的东西就可以解决这个问题了,也就是从192.168.0.29收到的包转发给192.168.0.1,在把从192.168.0.1收到的包发给192.168.0.29。这样192.168.0.29根本就不会意识到自己被监听了。具体实现:1、欺骗192.168.0.29,告诉这台机器网关192.168.0.1的MAC地址是自己(192.168.0.24)。[root@Linuxdsniff-2.3]#./arpspoof-ieth0-t192.168.0.29192.168.0.10:50:56:40:7:710:0:86:61:6b:4e080642:arpreply192.168.0.1is-at0:50:56:40:7:710:50:56:40:7:710:0:86:61:6b:4e080642:arpreply192.168.0.1is-at0:50:56:40:7:710:50:56:40:7:710:0:86:61:6b:4e080642:arpreply19......

阅读全文(682) | 评论:0

词法分析器生成工具FLEX简介(转)(2009-04-11 08:39:00)

摘要: 1.FLEX简介    单词的描述称为模式(Lexical Pattern),模式一般用正规表达式进行精确描述。FLEX通过读取一个有规定格式的文本文件,输出一个如下所示的C语言源程序。    FLEX的输入文件称为LEX源文件,它内含正规表达式和对相应模式处理的C语言代码。LEX源文件的扩展名习惯上用.l表示。FLEX通过对源文件的扫描自动生成相应的词法分析函数 int yylex(),并将之输出到名规定为lex.yy.c的文件中。实用时,可将其改名为lexyy.c。该文件即为LEX的输出文件或输出的词法分析器。也可将 int yylex()加入自已的工程文件中使用。 2. 模式简介    LEX的模式的格式(也称为规则)是机器可读的正规表达式,正规表达工是用连接、并、闭包运算递归生成的。为了方便处理,LEX在此基础上增加了一些运算。下列是按运算优先级由高往低排列的LEX的正规表达式的运算符。 “\[]^-?.*+|()/${}%<>    关于LEX的模式定义,可参见下页附表1.1 3.LEX源文件格式    LEX对源文件的格式要求非常严格,比如若将要求顶行书写的语句变成非顶行书写就会产生致命错误。而LEX本身的查错能力很弱,所以书写时一定要注意。    LEX的源文件由三个部份组成,每个部分之间用顶行的“%%”分割,其格式如下:    定义部份    %%    规则部份     %%    用户附加C语言部份 3.1定义部份    定义部份由C语言代码、模式的宏定义、条件模式的开始条件说明三部份组成。    其中,C代码部份由顶行的%{和}%引入,LEX扫描源文件时将%{和}%之间的部分原封不动的拷贝到输出文件lex.yy.c中. 附表1.1 LEX 的模式定义 模 式 解 释 X 匹配单个字符x。(也可将模式写为”x”) . 匹配除换行符’\n’之外的任......

阅读全文(4445) | 评论:1

C++标准库简介(转)(2009-04-02 16:23:00)

摘要:C++标准库的所有头文件都没有扩展名。C++标准库的内容总共在50个标准头文件中定义,其中18个提供了C库的功能。 <cname>形式的标准头文件【 <complex>例外】其内容与ISO标准C包含的name.h头文件相同,但容纳了C++扩展的功能。在 <cname>形式标准的头文件中,与宏相关的名称在全局作用域中定义,其他名称在std命名空间中声明。在C++中还可以使用name.h形式的标准C库头文件名。C++标准库的内容分为10类:C1.语言支持 C2.输入/输出 C3.诊断 C4.一般工具 C5.字符串C6.容器 C7.迭代器支持 C8.算法 C9.数值操作 C10.本地化C1 标准库中与语言支持功能相关的头文件 头文件  描述 <cstddef> 定义宏NULL和offsetof,以及其他标准类型size_t和ptrdiff_t。与对应的标准C头文件的区别是,NULL是C++空指针常量的补充定义,宏offsetof接受结构或者联合类型参数,只要他们没有成员指针类型的非静态成员即可。<limits> 提供与基本数据类型相关的定义。例如,对于每个数值数据类型,它定义了可以表示出来的最大值和最小值以及二进制数字的位数。<climits> 提供与基本整数数据类型相关的C样式定义。这些信息的C++样式定义在 <limits>中<cfloat> 提供与基本浮点型数据类型相关的C样式定义。这些信息的C++样式定义在 <limits>中<cstdlib> 提供支持程序启动和终止的宏和函数。这个头文件还声明了许多其他杂项函数,例如搜索和排序函数,从字符串转换为数值等函数。它与对应的标准C头文件stdlib.h不同,定义了abort(void)。abort()函数还有额外的功能,它不为静态或自动对象调用析构函数,也不调用传给atexit()函数的函数。它还定义了exit()函数的额外功能,可以释放静态对象,以注册的逆序调用用atexit()注册的函数。清除并关闭所有打开的C流,把控制权返回给主机环境。<new> 支持动态内存分配<typeinfo> 支持变量在运行期间的类型标识<exception> 支持......

阅读全文(3252) | 评论:1

c++中的getline()(2009-03-29 14:37:00)

摘要:在C++中,当调用getline()函数时,在vc++6.0下运行时,需转行两次。且在某些情况下,会发生错误。 例如: //C++ #include <iostream>#include <fstream>#include <string> using namespace std; int main(){ ofstream outFile; string state = ""; string capital = "";  outFile.open("date.txt");  if(!outFile.is_open()) {  outFile.open("date.txt"); }  cout << "The state: "; getline(cin, state);  while(state != "x" && state != "X") {  cout << "The capital: ";  getline(cin, capital);   outFile << state << '#' << capital << endl;   cout << "The state: ";  getline(cin, state); }  return 0;} 当键入:Oregon, Salem, New Jersey, Trenton, x 结果为:Oregon#                Salem#New Jersey               Trenton#x 结果......

阅读全文(2011) | 评论:0