Linux下SYN Cookie的实现原理及方法

| 收藏本文 下载本文 作者:当时明月在

以下是小编整理的Linux下SYN Cookie的实现原理及方法(共含10篇),欢迎阅读分享。同时,但愿您也能像本文投稿人“当时明月在”一样,积极向本站投稿分享好文章。

Linux下SYN Cookie的实现原理及方法

篇1:Linux下SYN Cookie的实现原理及方法

概述 在目前以IPv4为支撑的网络协议上搭建的网络环境中,SYN Flood是一种非常危险而常见的DoS攻击方式,

Linux下SYN Cookie的实现原理及方法

到目前为止,能够有效防范SYN Flood攻击的手段并不多,而SYN Cookie就是其中最著名的一种。SYN Cookie原理由D. J. Bernstain和 Eric Schenk发明。在很多

篇2:linux下python抓屏实现方法

作者:zevolo 字体:[增加 减小] 类型:

这篇文章主要介绍了linux下python抓屏实现方法,涉及Python操作屏幕截取的相关技巧,需要的朋友可以参考下

本文实例讲述了linux下python抓屏实现方法,分享给大家供大家参考。具体实现代码如下:

#!/usr/bin/python‘‘‘by zevolo, .12.20‘‘‘import gtk.gdkimport gtkimport glibclass MyRect: def __init__(self, x = 0, y = 0, w = 0, h = 0): self.x = x self.y = y self.w = w self.h = h def __init__(self, x, y): self.x = min(int(x.x), int(y.x)) self.y = min(int(x.y), int(y.y)) self.w = abs(int(y.x - x.x)) self.h = abs(int(y.y - x.y))class MyPair(): def __init__(self, x = 0, y = 0): self.x = x self.y = yclass MyPoint(MyPair): def __init__(self, x = 0, y = 0): MyPair.__init__(self, x, y)class MySize(MyPair): def __init__(self, w = 0, h = 0): MyPair.__init__(self, x, y)class MyCapture(): (event_enter, event_leave) = (0, 1) def __init__(self): pass def capture(self): pass def handleEvent(self, event): if event == event_enter:enterSnap() elif event == event_leave:leaveSnap() def enterSnap(self): pass def leaveSnap(self): pass def snap(self, window = None, rect = None, name = None): passclass MyCaptureGtk(MyCapture): def __init__(self): MyCapture.__init__(self) self.window = gtk.Window() self.window.set_default_size(1,1) self.window.connect(“button-press-event”, self.button_press_cb) self.first = None self.second = None self.window.show() #self.window.set_events(gtk.gdk.BUTTON_PRESS_MASK) def getWindow(self): return self.window def button_press_cb(self, widget, event): #print “type is %d” % event.type if event.type == gtk.gdk.BUTTON_PRESS:if event.button == 1: #left button print “(%d, %d), (%d, %d), button is %d” % (event.x_root, event.y_root, event.x, event.y, event.button) if not self.first: self.first = MyPoint(event.x_root, event.y_root) else: self.second = MyPoint(event.x_root, event.y_root) self.snap(None, MyRect(self.first, self.second)) self.first = Noneelif event.button == 3: #right button self.uncapture()else: pass def uncapture(self): if self.first:print “cancel”self.first = None else:print “exit now”gtk.gdk.pointer_ungrab()gtk.mainquit() def capture(self, time = 0L): cursor = gtk.gdk.Cursor(gtk.gdk.display_get_default(), gtk.gdk.CROSSHAIR) ret = gtk.gdk.pointer_grab(self.window.window, True, gtk.gdk.BUTTON_PRESS_MASK, None, cursor, time) if ret == gtk.gdk.GRAB_SUCCESS:print “left button start, end, right button cancel/exit” else:print “failed to capture %d, (viewable %d),(frozen %d), (already %d)” \ % (ret, gtk.gdk.GRAB_NOT_VIEWABLE, gtk.gdk.GRAB_FROZEN, gtk.gdk.GRAB_ALREADY_GRABBED) def snap(self, window = None, rect = None, name = None): w = window if not window:#w = gtk.gdk.get_default_root_window()d = gtk.gdk.display_get_default()w = d.get_default_screen().get_root_window() r = rect if not r:sz = w.get_size()r = MyRect(0, 0, sz[0], sz[1]) print “The size of the window is (%d, %d, %d, %d)” % (r.x, r.y, r.w, r.h) n = name if not n:n = “screenshot.png” buf = gtk.gdk.Pixbuf(gtk.gdk.COLORSPACE_RGB,False,8, r.w, r.h) buf = buf.get_from_drawable(w,w.get_colormap(), r.x, r.y, 0, 0, r.w, r.h) if (buf != None):buf.save(n, “png”)print “Screenshot saved to %s.” % n else:print “Unable to get the screenshot.”def timeout(data): #print “timeout” data.capture()if __name__ == ‘__main__‘: cap = MyCaptureGtk() w = cap.getWindow() w.show() glib.timeout_add_seconds(1, timeout, cap)#cap.snap() gtk.main()

希望本文所述对大家的Python程序设计有所帮助,

篇3:网络监听的原理、实现技术与防范方法

局域网具有设备共享、信息共享、可进行高速数据通讯和多媒体信息通信、分布式处理、具有较高的兼容性和安全性等基本功能和特点,目前局域网主要用于办公室自动化和校园教学及管理,一般可根据具体情况采用总线形、环形、树形及星形的拓扑结构。

一、网络监听

网络监听技术本来是提供给网络安全管理人员进行管理的工具,可以用来监视网络的状态、数据流动情况以及网络上传输的信息等。当信息以明文的形式在网络上传输时,使用监听技术进行攻击并不是一件难事,只要将网络接口设置成监听模式,便可以源源不断地将网上传输的信息截获。网络监听可以在网上的任何一个位置实施,如局域网中的一台主机、网关上或远程网的调制解调器之间等。

二、在局域网实现监听的基本原理

对于目前很流行的以太网协议,其工作方式是:将要发送的数据包发往连接在一起的所有主机,包中包含着应该接收数据包主机的正确地址,只有与数据包中目标地址一致的那台主机才能接收。但是,当主机工作监听模式下,无论数据包中的目标地址是什么,主机都将接收(当然只能监听经过自己网络接口的那些包)。

在因特网上有很多使用以太网协议的局域网,许多主机通过电缆、集线器连在一起。当同一网络中的两台主机通信的时候,源主机将写有目的的主机地址的数据包直接发向目的主机。但这种数据包不能在IP层直接发送,必须从TCP/IP协议的IP层交给网络接口,也就是数据链路层,而网络接口是不会识别IP地址的,因此在网络接口数据包又增加了一部分以太帧头的信息。在帧头中有两个域,分别为只有网络接口才能识别的源主机和目的主机的物理地址,这是一个与IP地址相对应的48位的地址。

传输数据时,包含物理地址的帧从网络接口(网卡)发送到物理的线路上,如果局域网是由一条粗缆或细缆连接而成,则数字信号在电缆上传输,能够到达线路上的每一台主机。当使用集线器时,由集线器再发向连接在集线器上的每一条线路,数字信号也能到达连接在集线器上的每一台主机。当数字信号到达一台主机的网络接口时,正常情况下,网络接口读入数据帧,进行检查,如果数据帧中携带的物理地址是自己的或者是广播地址,则将数据帧交给上层协议软件,也就是IP层软件,否则就将这个帧丢弃。对于每一个到达网络接口的数据帧,都要进行这个过程。

然而,当主机工作在监听模式下,所有的数据帧都将被交给上层协议软件处理。而且,当连接在同一条电缆或集线器上的主机被逻辑地分为几个子网时,如果一台主机处于监听模式下,它还能接收到发向与自己不在同一子网(使用了不同的掩码、IP地址和网关)的主机的数据包。也就是说,在同一条物理信道上传输的所有信息都可以被接收到。另外,现在网络中使用的大部分协议都是很早设计的,许多协议的实现都是基于一种非常友好的、通信的双方充分信任的基础之上,许多信息以明文发送。因此,如果用户的账户名和口令等信息也以明文的方式在网上传输,而此时一个 或网络攻击者正在进行网络监听,只要具有初步的网络和TCP/IP协议知识,便能轻易地从监听到的信息中提取出感兴趣的部分。同理,正确的使用网络监听技术也可以发现入侵并对入侵者进行追踪定位,在对网络犯罪进行侦查取证时获取有关犯罪行为的重要信息,成为打击网络犯罪的有力手段。

三、局域网监听的简单实现

要使主机工作在监听模式下,需要向网络接口发出I/O控制命令,将其设置为监听模式。在Unix系统中,发送这些命令需要超级用户的权限。在Windows系列操作系统中,则没有这个限制。要实现网络监听,可以自己用相关的计算机语言和函数编写出功能强大的网络监听程序,也可以使用一些现成的监听软件,在很多 网站或从事网络安全管理的网站都有。

1. 一个使用sniffer pro进行监听并解析IPv4协议头部的例子

(1)IP头部概述

对于上图中各个字段的含义以及IPv4和IPv6报头的区别,RFC文档和一些计算机网络基础的书籍中都有详细的说明,在此不再赘述。

(2)实例解析

是用sniffer pro进行监听时捕获的IPv4协议报头。

第一部分显示的是关于IP的版本信息,它的当前版本号为4;然后是头部的长度,其单位是32-bit的字,本例中值为20bytes,

第二部分是有关服务类型的信息。

第三部分为头部长度字段,本例中IP报头长为56字节。

第四部分是关于分段的内容。

第五部分是生存时间字段,一般为64或128,本例为128seconds/hops。

第六部分是协议部分,说明了上层使用的服务类型,本例中为UDP。

第七部分以下各字段分别为校验和、源地址、目的地址等。

2. 一个使用sniffer pro进行监听获取邮箱密码的例子

通过对用监听工具捕获的数据帧进行分析,可以很容易的发现敏感信息和重要信息。例如,对一些明码传输的邮箱用户名和口令可以直接显示出来。

gao-jian为邮箱用户名,12345为邮箱密码,都以明码显示,由此也可以看到局域网监听技术如果用于不正当的目的会有多大的危害。

在以上各部分中还有更详细的信息,在此不作更多的分析。通过这个例子想说明的是通过网络监听可以获得网络上实时传输的数据中的一些非常重要的信息,而这些信息对于网络入侵或入侵检测与追踪都会是很关键的。

四、如何检测并防范网络监听

网络监听是很难被发现的,因为运行网络监听的主机只是被动地接收在局域局上传输的信息,不主动的与其他主机交换信息,也没有修改在网上传输的数据包。

1. 对可能存在的网络监听的检测

(1)对于怀疑运行监听程序的机器,用正确的IP地址和错误的物理地址ping,运行监听程序的机器会有响应。这是因为正常的机器不接收错误的物理地址,处理监听状态的机器能接收,但如果他的IP stack不再次反向检查的话,就会响应。

(2)向网上发大量不存在的物理地址的包,由于监听程序要分析和处理大量的数据包会占用很多的CPU资源,这将导致性能下降。通过比较前后该机器性能加以判断。这种方法难度比较大。

(3)使用反监听工具如antisniffer等进行检测

2. 对网络监听的防范措施

(1)从逻辑或物理上对网络分段

网络分段通常被认为是控制网络广播风暴的一种基本手段,但其实也是保证网络安全的一项措施。其目的是将非法用户与敏感的网络资源相互隔离,从而防止可能的非法监听。

(2)以交换式集线器代替共享式集线器

对局域网的中心交换机进行网络分段后,局域网监听的危险仍然存在。这是因为网络最终用户的接入往往是通过分支集线器而不是中心交换机,而使用最广泛的分支集线器通常是共享式集线器。这样,当用户与主机进行数据通信时,两台机器之间的数据包(称为单播包Unicast Packet)还是会被同一台集线器上的其他用户所监听。

因此,应该以交换式集线器代替共享式集线器,使单播包仅在两个节点之间传送,从而防止非法监听。当然,交换式集线器只能控制单播包而无法控制广播包(Broadcast Packet)和多播包(Multicast Packet)。但广播包和多播包内的关键信息,要远远少于单播包。

(3)使用加密技术

数据经过加密后,通过监听仍然可以得到传送的信息,但显示的是乱码。使用加密技术的缺点是影响数据传输速度以及使用一个弱加密术比较容易被攻破。系统管理员和用户需要在网络速度和安全性上进行折中。

(4)划分VLAN

运用VLAN(虚拟局域网)技术,将以太网通信变为点到点通信,可以防止大部分基于网络监听的入侵。

五、结束语

网络监听技术作为一种工具,总是扮演着正反两方面的角色。对于入侵者来说,最喜欢的莫过于用户的口令,通过网络监听可以很容易地获得这些关键信息。而对于入侵检测和追踪者来说,网络监听技术又能够在与入侵者的斗争中发挥重要的作用。鉴于目前的网络安全现状,我们应该进一步挖掘网络监听技术的细节,从技术基础上掌握先机,才能在与入侵者的斗争中取得胜利。

篇4:uClinux下动态Web技术的实现方法

2.1uClinux下WebServer的实现

uClinux下,主要有三个WebServer:httpd、thttpd和Boa。Httpd是最简单的一个WebServer,它的功能最弱,不支持认证,不支持CGI。Thttpd和Boa都支持认证、CGI等,功能都比较全。为了实现动态Web技术,这里我们选择实现一个支持CGI的、非常适合于嵌入式系统的BoaWebServer。

Boa是一个单任务的http服务器,源代码开放、性能高。目前,uClinux的代码中已经包含boa的源代码,在uClinux下实现Boa,需要对Boa做一些配置和修改。这主要通过对boa.conf和mime.types文件进行修改来实现,需要改动的配置有以下几项。

(1)建目录

由于uClinux默认的根文件系统romfs是只读的,不能用mkdir等命令来新建目录,故应在编译内核前先建好要用到的目录,这通过修改/uclinux-samsung/vendors/Samsung/4510b/makefile文件来实现。在ROMFS_DIRS=bindevetchomelibmntprocusrvar的后边增加home/webhome/web/cgi-bin,这样修改后编译内核,编译好的'根文件系统romfs中就包含这些目录了。

(2)指定Web服务器的根目录路径(SERVER_ROOT)

进入/uclinux-samsung/user/boa/src/目录,通过修改define.h文件中#defineERVER_ROOT“/home”语句来指定SERVER_ROOT。另外,还可以通过命令行来指定,例如:boa-c/home/&。而且命令行指定的SERVER_ROOT可以覆盖define.h文件所指定的。

(3)修改boa.conf文件

在./uclinux-samsung/user/boa/src/boa.conf里修改:

*将userobody

Groupogroup

改为User0

Group0;

*将DocumentRoot/var/www

改为DocumentRoot/home/web,这样web服务器的文档根目录为/home/web;

*将MimeTypes/etc/mime.types

改为MimeTypes/home/web/mime.types;

定义默认首页和CGI程序所在目录,即

DirectoryIndexindex.html

ScriptAlias/cgi-bin//home/web/cgi-bin/

这样指定后,.index.htm为远程浏览客户访问WebServer所看到的首页默认值,用C编写的CGI程序编译成二进制文件,放到/cgi-bin/目录下,CGI程序能被正确地执行。

Boa.conf文件和mime.types文件必须放到Web服务器根目录下,所以把修改后的bao.conf和mime.types拷贝到“./uclinux-samsung/romfs/home/”目录下。然后在/uclinux-samsung/Vendors/Samsung/4510b/inittab里修改,在:inet:unknown:/bin/inetd后加入:boa:unknown:/bin/boac/home。

配置过程后,重新编译内核,编译时选中Boa选项。把编译好的内核下载到开发板,启动uClinux,完成IP配置,启动BoaWebServer,然后就可以通过IE访问你的网页了。如果想启动uClinux时自动启动BoaWebServer,可以修改rc文件,进入uclinux-samsung/vendors/Samsung/4510B目录,在运行脚本rc中增加两行:

ifconfigeth202.196.9.197up

boa-c/home/&

修改后重新编译内核,再下载到开发板运行。运行uClinux后,不需要配置就可以直接通过IE来访问你的网页了。

2.2uClinux下实现动态Web页面的CGI技术

到目前为止,实现动态Web页面有4种技术可供选择:CGI(CommonGatewayInterface)、ASP(ActiveXServerPage)、ASP(ActiveXServerPage)、PHP(PersonalHomePage)和JSP(JavaServerPage)。在uClinux下如果要实现动态网页,只能采用CGI,因此目前uClinux还不支持ASP、PHP等动态Web页面技术。

CGI(通用网关接口)提供Web服务器一个执行外部程序的通道,这种服务端技术使得浏览器和服务器之间具有交互性。CGI程序属于一个外部程序,需要编译成可执行文件,以便在服务端运行,其应用程序结构如图1所示。浏览器将用户输入的数据送到Web服务器,Web服务器将数据使用STDIN送给CGI程序,在执行CGI程序后,可能会访问存储数据的一些文档,最后使用STDOUT输出HTML形式的结构文件,经Web服务器送回浏览器显示给用户。

CGI程序可以用任何程序设计语言编写,如Shell脚本语言、Perl、Fortran、Pascal、C语言等。但目前uClinux不支持Perl、Fortran等语言,而且C语言在平台无关性上表示不错,所以我们选择用C来编写CGI程序。另外,uClinux也不支持数据库,所以需要保存的数据只能保存到文件中,CGI查询数据时也是查询这些文件,而不是访问数据库。

2.3uClinux下动态Web页面的实现

下面通过一个例子来说明如何实现uClinux下的动态Web页面技术。此例子的目的是使用户能够通过Web页面内嵌表单提交数据,并能把用户提交的数据通过Web浏览器正确地返回给用户。实现动态Web页面的第一步是用HTML语言编写Web页及内建表单。编写Web页面时,要由ACTION属性来指定相关的CGI程序,如ACTION=cgi-bin/demo;由MOTHOD属性来指明所用的提交数据的方法,即MOTHOD=POST(GET)。本人编写的Web页面在浏览器中的显示如图2所示。

实现动态Web页面的第二步是用C编写CGI程序,CGI程序分为以下几部分:①根据POST方法或GET方法从提交的表单中接收数据;②URL编码的解码;③用printf函数来产生HTML源代码,并将经过解码后的数据正确地返回给浏览器。包括demo.c、cgivars.h和cgivars.c三个文件。将编写好的CGI程序编译成二进制文件放在cgi-bin/目录下,CGI程序能被正确地执行,最终CGI程序对上述表单数据的处理结果如图3所示。

图3CGI程序处理结果

下面对程序稍加说明。若以GET方法提交数据,表单中的数据被保存在QUERY_STRING环境变量中,通过调用函数getenv(“QUERY_STRING”)来读取数据;若以POST方法提交数据,则程序先从CONTENT_LENGTH环境量得到数据的字长,然后从标准输入中读取相应长度的字符串即可得到提交的数据。数组postinput[i]中保存的就是从表单中提取的数据。

URL编码的解码过程较为复杂,URL编码的规则下:①变量之间用“&”分开;②变量与其对应值之间用“=”连接;③空格符用“+”代替;④特殊意义的字符用%接相应的十六进制ASCII码代替。解码即为编码的逆过程。在程序中,对于从表单中提取过来的postinput[i]中的数据,当发现字符为“+”时,将它转换成空格;当发现字符为“&”时,意味着个名字/值对的结束,在此处将字符中切成几个字符串;当再现字符为“=”时,意味着一个名字/值对的名字部分的结束,在此再将名字/值对分开。最后通过调用unescape_url(char*url)子函数将十六进制ASCII码值表示的特殊字符转换成相应的ASCII字符。

结语

用本文所提供的方法实现的动态WebServer通用性强,能够在嵌入式平台上高效率地运行,有着广泛的应用前景。

篇5:在VxWorks下实现NAT/NAPT的方法

在VxWorks下实现NAT/NAPT的方法

摘要:介绍NAT、NAPT的基本概念和工作原理;结合VxWorks的网络协议栈,描述一种利用VxWorks操作系统提供的钩子函数来开发实现NAT和NAPT的方法。

关键词:NATNAPT钩子函数网络协议栈截获转换校验和

引言

近年来,随着Internet的迅猛发展,连入Internet的主机数量成倍增长。由于最初设计Internet的时候并没有考虑到需要支持这么大的规模,因而Internet使用的Ipv4协议中IP地址的长度选择了32位,它可以使IP包的格式很好地对齐;但是,目前IP地址的短缺已经成为Internet面临的最大问题之一。

为了解决IP地址短缺的问题,人们提出了许多解决方案,nternet能够支持到新一代IP协议Ipv6的出台。在众多的解决方案中,网络地址转换NAT(NetworkAddressTranslation)技术提供了一种完全将私有网和公共网隔离的方法,从而得到了广泛的应用。

图1NAT工作原理示意图

1NAT技术

NAT技术的基本功能就是,用1个或几个IP地址来实现1个私有网中的所有主机和公共网中主机的IP通信。NAT技术可为TCP、UDP以及ICMP数据包提供透明转发。

1.1NAT工作原理

NAT的基本工作原理是,当私有网主机和公共网主机通信的IP包经过NAT网关时,将IP包中的源IP或目的IP在私有IP和NAT的公共IP之间进行转换。

如图1所示,NAT网关有2个网络端口,其中公共网络端口的IP地址是统一分配的公共IP,为202.204.65.2;私有网络端口的IP地址是保留地址,为192.168.1.1。私有网中的主机192.168.1.2向公共网中的主机166.111.80.200发送了1个IP包(Des=166.111.80.200,Src=192.168.1.2)。当IP包经过NAT网关时,NAT会将IP包的源IP转换为NAT的公共IP并转发到公共网,此时IP包(Des=166.111.80.200,Src=202.204.65.2)中已经不含任何私有网IP的信息。由于IP包的源IP已经被转换成NAT的公共IP,响应的IP包(Des=202.204.65.2,Src=166.111.80.200)将被发送到NAT。这时,NAT会将IP包的目的IP转换成私有网中主机的IP,然后将IP包(Des=192.168.1.2,Src=166.111.80.200)转发到私有网。对于通信双方而言,这种地址的转换过程是完全透明的。

1.2NAPT技术

由于NAT实现是私有IP和NAT的公共IP之间的转换,那么,私有网中同时与公共网进行通信的主机数量就受到NAT的公共IP地址数量的限制。为了克服这种限制,NAT被进一步扩展到在进行IP地址转换的同时进行Port的转换,这就是网络地址端口转换NAPT(NetworkAddressPortTranslation)技术。

NAPT与NAT的区别在于,NAPT不仅转换IP包中的IP地址,还对IP包中TCP和UDP的Port进行转换。这使得多台私有网主机利用1个NAT公共IP就可以同时和公共网进行通信。

如图2所示,私有网主机192.168.1.2要访问公共网中的Http服务器166.111.80.200。首先,要建立TCP连接,假设分配的TCPPort是1010,发送了1个IP包(Des=166.111.80.200:80,Src=192.168.1.2:1010),当IP包经过NAT网关时,NAT会将IP包的源IP转换为NAT的公共IP,同时将源Port转换为NAT动态分配的1个Port。然后,转发到公共网,此时IP包(Des=166.111.80.200:80,Src=202.204.65.2:)已经不含任何私有网IP和Port的信息。由于IP包的源IP和Port已经被转换成NAT的公共IP和Port,响应的IP包(Des=202.204.65.2:,Src=2010166.111.80.200:80)将被发送到NAT。这时NAT会将IP包的目的IP转换成私有网主机的IP,同时将目的Port转换为私有网主机的Port,然后将IP包(Des=192.168.1.2:1010,Src=166.111.80.200:80)转发到私网。对于通信双方而言,这种IP地址和Port的转换是完全透明的。

2VxWorks的网络协议栈

与VxWorks操作系统捆绑发行的标准网络协议栈,是一个与BSD4.4兼容、功能齐全并针对嵌入式应用作了大量优化的TCP/IP协议栈。该网络协议栈与VxWorks操作系统、开发工具、设备管理

工具以及上层协议和应用可以集成在一起,有完整的路由功能并可以根据需要进行剪裁。VxWorks的网络协议栈的分层结构如图3所示。

VxWorks网络协议栈传输数据使用的内存,是在系统启动进行网络协议初始化的时候就申请下来的,并使用系统提供的netBufLib建立内存字点池来管理这些内存空间。网络协议栈传输数据所需的内存都是从这些内存节点池中申请,使用完毕后再释放。

NetBufLib通过3种数据结构处理网络协议栈传输的数据:mBlk、clBlk和Cluster。其中,Cluster保存的是实际的数据,mBlk和clBlk中保存的信息是用来管理Cluster中保存的数据的。为了满足传输不同大小数据的需要,Cluster是一些大小不同的内存块;缺省情况下,VxWorks网络协议栈创建了大小从64~2048字节的6个不同的内存节点池。

由于mBlk中保存的只是指向数据的指针,因此,网络协议栈不同层之间的数据传输可以避免数据拷贝。此外,对于分布在多个Cluster中的数据,可以通过mBlk把它们链在一起,并且只需要传递链首的mBlk就可以了。VxWorks网络协议栈的“零拷贝”技术就是建立在这种机制的基础之上的。图4描述了2个提交给网络协议栈TCP层的包的数据结构。

在mBlk结构中,有2个指向其它mBlk的指针:1个指向同一个包的下一个mBlk;另一个指向下一个包的链首的mBlk。ClBlk指向的就是实际存储数据的Cluster。

3向VxWorks网络协议栈加入NAT

为了向VxWorks网络协议栈中加入NAT,必须实现2个基本操作:IP包的截获得IP包的处理。

3.1VxWorks下IP包的截获

VxWorks网络协议栈在物理驱动层和IP层上分别提供了两类钩子函数:EtherHook和IpFilterHook。利用这两类钩子函数,可以实现对IP包的截获。

(1)EtherHook

EtherHook提供对以太帧的截获功能。它包括2个钩子函数:以太帧接收钩子函数EtherInputHook和以太帧发送钩子函数EtherOutPutHook。它们分别用函数EtherInputHookAdd和EtherOutputHookAdd安装。安装了这些钩子函数后,每当有以太帧被接收到时,函数EtherInputHook就会在该以太帧被提交给上层处理前被自动调用;每当有以太帧被发送时,函数EtherOutputHook会在该以太帧被发送前被自动调用。通过截获以太帖,可以达到截获IP包的目的。

(2)IpFilterHook

IpFilterHook提供对IP包的截获功能。它只对应1个钩子函数,用函数ipFilterHookAdd就可以完成IpFilterHook的安装。安装了IpFilterHook后,每当有IP包被接收到时,函数IpFilterHook就会被自动调用,从而实现对IP包的截获。

3.2NAT过程中IP包的处理

利用钩子函数完成IP包的截获后,就可以根据需要对IP包进行处理。首先,可以从IP包中剥离出IP头,根据IP头中的“协议”域可以判断出是UDP包还是TCP包。然后,从IP包中剥离出UDP头或TCP头,利用IP头和UDP头或者TCP头中的相关信息,就可以根据需要进行IP地址和Port的转换处理。

NAT一般采用1个映射表来实现IP地址和Port的转换。对于截获到的IP包,通过比较IP包的目的IP、目的Port、源IP、源Port和NAT映射表中的相应表现,对IP包的目的IP、目的Port、源IP、源Port进行转换。

典型的NAT映射表如图5所示。

(1)处理由内到外的IP包

由内到外的IP包指的是私有网主机通过NAT发送到公共网主机的IP包。它的源IP是私有IP,目的`IP是公共IP。

当截获到1个由内到外的IP包时,NAT首先以IP包的源IP和源Port作为RealSrcIP和RealSrcPort的匹配条件,在映射表中进行搜索。如果找到1个对应的表项,就用表项的NATIP和NATPort替换IP包的源IP和源Port,而保持IP包的目的IP和目的Port不变。然后,重新计算TCP或UDP的校验和,就可把IP包归还给VxWorks网络协议栈。

如果在映射表中没有搜索到对应的表项,NAT就会向映射表中添加1个新的表现。该表项中的RealSrcIP和RealSrcPort用IP包的源IP和源Port来填充;NATPort用NAT分配的1个空闲Port填充。然后,根据新增加的表项,按照上面相同的步骤完成对IP包的处理。后续相同的IP包也都用这个表项来处理。

(2)处理由外到内的IP包

由外到内的IP包指的是从公共网通过NAT发送到私有用的IP包。它的源IP是公共IP,目的IP是NAT的公共IP。

当截获到1个由外到内的IP包时,NAT就以

IP包的目的IP和目的Port作为NATIP和NATPort的匹配条件,在映射表中进行搜索。如果找到1个对应的表项,就用表项的RealSrcIP和RealSrcPort来替换IP包的目的IP和目的Port,而保持IP包的源IP和源Port不变。然后,重新计算TCP或UDP的校验和,就可把IP包归还给VxWorks网络协议栈。

如果在映射表中没有搜索到对应的表项,则对IP包不作任何处理,直接归还给VxWorks网络协议栈。

(3)NAT映射表的配置

作为NAT完成IP包中IP和Port转换的依据,NAT映射表的管理关系到NAT的功能和性能。NAT映射表的配置可以分为2部分:静态配置部分和动态配置部分。

静态配置部分主要用于NATIP、NATPort和私有IP、私有Port的映射关系可以预见的应用,例如UDP通信和TCPServer运行在私网中某个主机等情况。NAT映射表静态配置部分可以在NAT运行前根据规划直接完成配置。

动态配置部分主要用于NATIP、NATPort和私有IP、私有Port的映射关系不可预见的应用,例如在私有网中某个主机上运行TCPClient来与公共网中某个主机上的TCPServer建立连接进行通信。因这种情况下,私有网主机使用的Port是动态分配的。为了实现需要NATIP、NATPort和私有IP、私有Port的转换,必须动态配置NAT映射表。相对于静态配置部分而言,动态配置部分的数据结构、数据组织和搜索算法的设计和实现的难度要大得多,关键是要实现一个高效的搜索算法。

篇6:uClinux下动态Web技术的实现方法

摘要:介绍uClinux操作系统的御,实现uClinux下的Boa Web Server;讨论如何通过编写CGI程序来最终实现uClinux下的动态Web页面技术。

关键词:uClinux 动态Web技术 CGI(通用网关接口) Web Server

随着计算机技术发展,嵌入式系统已成为计算机领域的一个重要组成部分。所谓嵌入式系统,是以应用中为心,以计算机技术为基础,软件硬件可裁剪,适应应用系统对功能、可靠性、成本、体积、功耗严格要求的专用计算机系统。它具有计算机的功能,但又不称为计算机,包括机顶盒、微波炉、电梯、数控系统、医疗仪器等。

当今的信息时代,是一个构筑在网络基础之睥时代,互联网已经渗透到了人们工作和生活的各个角落。嵌入式Internet是近几年发展起来一项新兴概念和技术,不仅通过PC机能上网,通过各种各样的嵌入式设备也能上网,使用浏览Web已经成为现代人的习惯。21世纪的电子信息产品,如果不能适应这个发展的方向和要求,将很难有强劲的竞争力。而目前正在开发的嵌入式系统中,49%的项目选择Linux作为嵌入式操作系统,因此对uClinux操作系统下嵌入式Web技术的研究具有较高的现实意义,本文就此作些讨论。

1 uClinux嵌入式操作系统

Linux是一种优秀的自由软件。由于源代码公开,功能强大,具有良好的网络支持,又易于睛,近几年成为了最有潜力的嵌入式操作系统。UClinux是一个完全符合GNU/GPL(通用公共许可证)公约的项目和完全开发代码。它是标准Linux的一个分支,现在由Lineo公司支持维护。它专门针对没有MMU的CPU,并且为嵌放式系统做了许多小型化的工作。现在已经成为使用uClinux的安例包括:基于ColdFire的CISCO 2500/3000/4000路由器;基于ARM7TDMI的Aplio公司的voice-over-IP电话;Axis公司的AXIS网络数码相机;Adomo公司的机顶盒以及各种开发板。

UClinux经过对标准Linux内核的改动,形成了一个高度优化的、代码紧凑的嵌入式Linux,虽然它的`体积很小,但uClinux仍然保留了Linux的大多数的优点:稳定、良好的移植性、优秀的网络功能、对各种文件系统完备的支持,以及标准丰富的API。它的主要特征如下:①通用Linux API;②内核体积小于512KB,内核加上文件系统小于900KB;③完整体积小于512KB,内核加上文件系统小于900KB;④支持其它大量网络协议;⑤支持各种文件系统,包括NFS、ext2、romfs and JFFS、MS-DOS和FAT16;⑥支持各种典型的处理器构架,包括ARM、PowerPC、X86等。

篇7:uClinux下动态Web技术的实现方法

2.1 uClinux下Web Server的实现

uClinux下,主要有三个Web Server:httpd、thttpd和Boa。Httpd是最简单的一个Web Ser

[1] [2] [3] [4]

篇8:在VxWorks下实现NAT/NAPT的方法

在VxWorks下实现NAT/NAPT的方法

摘要:介绍NAT、NAPT的基本概念和工作原理;结合VxWorks的网络协议栈,描述一种利用VxWorks操作系统提供的钩子函数来开发实现NAT和NAPT的方法。

关键词:NAT NAPT 钩子函数 网络协议栈 截获 转换 校验和

引言

近年来,随着Internet的迅猛发展,连入Internet的主机数量成倍增长。由于最初设计Internet的时候并没有考虑到需要支持这么大的规模,因而Internet使用的Ipv4协议中IP地址的长度选择了32位,它可以使IP包的格式很好地对齐;但是,目前IP地址的短缺已经成为Internet面临的最大问题之一。

为了解决IP地址短缺的问题,人们提出了许多解决方案,nternet能够支持到新一代IP协议Ipv6的出台。在众多的解决方案中,网络地址转换NAT(Network Address Translation)技术提供了一种完全将私有网和公共网隔离的方法,从而得到了广泛的应用。

图1 NAT工作原理示意图

1 NAT技术

NAT技术的基本功能就是,用1个或几个IP地址来实现1个私有网中的所有主机和公共网中主机的IP通信。NAT技术可为TCP、UDP以及ICMP数据包提供透明转发。

1.1 NAT工作原理

NAT的基本工作原理是,当私有网主机和公共网主机通信的IP包经过NAT网关时,将IP包中的源IP或目的IP在私有IP和NAT的公共IP之间进行转换。

如图1所示,NAT网关有2个网络端口,其中公共网络端口的IP地址是统一分配的公共IP,为202.204.65.2;私有网络端口的IP地址是保留地址,为192.168.1.1。私有网中的主机192.168.1.2向公共网中的主机166.111.80.200发送了1个IP包(Des=166.111.80.200,Src=192.168.1.2)。当IP包经过NAT网关时,NAT会将IP包的源IP转换为NAT的公共IP并转发到公共网,此时IP包(Des=166.111.80.200,Src=202.204.65.2)中已经不含任何私有网IP的信息。由于IP包的`源IP已经被转换成NAT的公共IP,响应的IP包(Des=202.204.65.2,Src=166.111.80.200)将被发送到NAT。这时,NAT会将IP包的目的IP转换成私有网中主机的IP,然后将IP包(Des=192.168.1.2,Src=166.111.80.200)转发到私有网。对于通信双方而言,这种地址的转换过程是完全透明的。

1.2 NAPT技术

由于NAT实现是私有IP和NAT的公共IP之间的转换,那么,私有网中同时与公共网进行通信的主机数量就受到NAT的公共IP地址数量的限制。为了克服这种限制,NAT被进一步扩展到在进行IP地址转换的同时进行Port的转换,这就是网络地址端口转换NAPT(Network Address Port Translation)技术。

NAPT与NAT的区别在于,NAPT不仅转换IP包中的IP地址,还对IP包中TCP和UDP的Port进行转换。这使得多台私有网主机利用1个NAT公共IP就可以同时和公共网进行通信。

如图2所示,私有网主机192.168.

[1] [2] [3] [4]

篇9:Windows下DNS ID欺骗的原理与实现服务器教程

域名系统(DNS)是一种用于TCP/IP应用程序的分布式数据库,它提供主机名字和IP地址之间的转换信息,通常,网络用户通过UDP协议和DNS服务器进行通信,而服务器在特定的53 端口监听,并返回用户所需的相关信息。

一.DNS协议的相关数据结构

DNS数据报:

typedef struct dns

{

unsigned short id;

//标识,通过它客户端可以将DNS的请求与应答相匹配;

unsigned short flags;

//标志:[QR | opcode | AA| TC| RD| RA | zero | rcode ]

unsigned short quests;

//问题数目;

unsigned short answers;

//资源记录数目;

unsigned short author;

//授权资源记录数目;

unsigned short addition;

//额外资源记录数目;

}DNS,*PDNS;

在16位的标志中:QR位判断是查询/响应报文,opcode区别查询类型,AA判断是否为授权回答,TC判断是否可截断,RD判断是否期望递归查询,RA判断是否为可用递归,zero必须为0,rcode为返回码字段,

DNS查询数据报:

typedef struct query

{

unsinged char *name;

//查询的域名,这是一个大小在0到63之间的字符串;

unsigned short type;

//查询类型,大约有20个不同的类型

unsigned short classes;

//查询类,通常是A类既查询IP地址。

}QUERY,*PQUERY;

篇10:一种新型超链接交互样式设计方法与实现原理

超链接是网页中,必不可少的内容,超链接的交互设计,也是一个网页中最重要的细节。CSS 也为链接准备了几个伪类选择器,用来设置超链接的交互操作。但是在绝大多数网站中,我们看到的超链接交互样式,通常是:改变一下链接的颜色、取消或者增加 下划线、点击链接文本变色或者下划线消失等等。但实际上,超链接的交互设计,并非只能这么简单。

很久没有登录 W3C 的 ,今天上去看了一下,从第一眼就看到了他们的超练级的与众不同。把鼠标放上,点击,测试了一下他们的超链接交互设计,感觉非常不错,就稍微思考 了一下这个设计是如何实现的。稍微思考一下之后,才发现实现这个效果非常的容易,而且兼容性较好。下面就来介绍一下。

先来看一下他们的效果图片,当然,我更推荐直接去W3C 看效果。

实现原理和分析

首先,仍然是常规的超链接样式,带一条下划线,但是与普通的超链接样式不同的是,这条下划线要粗(2px 普通的 1px),同时这个下划线和文字颜色不同(用 color 和 text-decoration 定义的超链接下划线颜色是和文本相同的)。所以可以肯定,这个下划线是使用 border-bottom 属性定义的,并且 padding-bottom 了几个像素,空开一定距离。然后交互性操作就很简单了,只需要改变一下底边框的颜色就可以了。当点击事件发生的时候,超链接不是简单的改变了颜色,而是向 下移动了几个像素,这样给人的错觉就是按下去了一样,这种用户体验是传统超链接仅仅变换颜色所体验不到的。关于这个的实现,需要使用 position 的 relative 属性,激活 top 属性,即可让超链接脱离原来位置向下偏移一定距离。

既然原理分析完毕,那么我们就开始写出相应代码吧。

HTML 结构

随便输入一些字,加上个链接就OK了。

代码不换行代码换行

这里是 潜行者m 随便打的一些字,用来做链接交互样式的演示,链接在这里。这里是 潜行者m 随便打的一些字,用来做链接交互样式的演示,链接在这里。这里是 潜行者m 随便打的一些字,用来做链接交互样式的演示,链接在这里。

CSS 样式

代码不换行代码换行

div{width:300px;margin:20px auto;line-height:24px;}

div a{text-decoration:none;color:#000;padding-bottom:1px;}

div a:link,div a:visited{border-bottom:2px solid #f00;}

div a:hover{border-bottom:2px solid #00f;}

div a:active{border-bottom:2px solid #00f;outline:0 none;position:relative;top:1px;}

对 div 的宽度定义只是为了好看而已,对行高的定义,是为了不让下划线影响到下一行文字,这个可以自己决定,

然后先对 a 标签取消默认的下划线和颜色,再就是交互性的操作。注意,对 :active 使用了 outline 属性,防止有些浏览器在点击超链接的时候,超链接会出现边框。

发散思维

既然是用了边框的方式模拟下划线,那么可不可以通过调整超链接的高度让这条线变成一条可以交互操作的 “删除线” 呢?当然是可以的,我们只需要把 height 属性调小一点同时还需要让 a 的 display 属性变成 inline-block,就可以让边框穿过文字,由于 overflow 的默认属性是 visible 所以文本仍然是可见的。

代码不换行代码换行

div a{text-decoration:none;color:#000;padding-bottom:1px;height:6px;display:inline-block;}

这样就实现了下图效果

需要注意的是 a 元素是行间元素,直接对其使用 height 是没有作用的,但是对其加上 display:block 变成块元素,则会脱离文本,所以需要添加 inline-block 属性。但是这样,对于早期的 IE 浏览器兼容性不太好。

制作这样一个超链接的交互样式非常简单,而且交互效果很不错,平时我们应该多一点细心和发散思维,才能不断提高用户体验。

音频混响效果的原理及实现

注塑工艺流程及原理

网站暴库原理与方法剖析

考研 马原理唯物辩证法记忆方法

《统计原理》试题及答案

rootkits病毒原理及解决办法

高级扫描技术及原理

网络测试原理及分类

实现作文教学的创新的方法

实现伟大领导的四种方法

Linux下SYN Cookie的实现原理及方法(共10篇)

欢迎下载DOC格式的Linux下SYN Cookie的实现原理及方法,但愿能给您带来参考作用!
推荐度: 推荐 推荐 推荐 推荐 推荐
点击下载文档 文档为doc格式
点击下载本文文档