在上篇文章中,我们在PSNet包中创建了Test-TCPPort函数用于探测指定IP的指定端口是否开放,检测端口之后大多数人想到的可能就是需要通过PowerShell收发TCP消息包了,这篇文章里将会描述如何在PSNet包中创建针对TCP消息包的函数Receive-和TCPMessageSend-TCPMessage。为了承接上篇中我们创建的PSNet工具集的思路,在确定了函数的命名之后,创建上述两个函数对应的.ps1文件放置在$env:PSSpace/PSNet/TCPOp/中。

接下来在$env:PSSpace/PSNet/PSNet.psm1中添加以下两条语句用于在工具集中引入上述两个函数文件:

. $env:PSSpace/PSNet/TCPOp/Receive-TCPMessage.ps1
. $env:PSSpace/PSNet/TCPOp/Send-TCPMessage.ps1

然后分别在创建的.ps1文件中添加以下代码:

        =====文件名:Receive-TCPMessage.ps1=====Receive-TCPMessage
{( [ValidateNotNullOrEmpty()][int] $Port )try{$EndPoint =  System.Net.IPEndPoint([System.Net.IPAddress]::Loopback,$Port)$Socket =  System.Net.Sockets.TCPListener($EndPoint)$Socket.Start()$Socket = $Socket.AcceptTCPClient()$EncodedText =  System.Text.ASCIIEncoding$Stream = $Socket.GetStream()$Buffer =  System.Byte[] $Socket.ReceiveBufferSize        ( $Bytes = $Stream.Read($Buffer,0,$Buffer.Length) ){$Stream.($Buffer,0,$Bytes)$EncodedText.GetString($Buffer,0,$Bytes)}$Socket.Close()$Socket.Stop()}catch{}
}
        =====文件名:Send-TCPMessage.ps1=====Send-TCPMessage
{( [ValidateNotNullOrEmpty()][string] $EndPoint,[int] $Port,[string] $Message )$IP = [System.Net.Dns]::GetHostAddresses($EndPoint)$Address = [System.Net.IPAddress]::Parse($IP)$Socket =  System.Net.Sockets.TCPClient($Address,$Port)$Stream = $Socket.GetStream()$Writer =  System.IO.StreamWriter($Stream)$Writer.AutoFlush = $true$Writer.NewLine = $true$Writer.($Message)$Socket.Close()
}

将代码保存到指定目录的对应文件后,分别启动两个PowerShell进程,分别导入PSNet Module:

Import-Module $env:PSSpace\PSNet

或者在启动PowerShell时指定参数,或者将下列语句创建批处理脚本启动加载指定Module的PowerShell进程。

start %windir%\System32\WindowsPowerShell\v1.0\powershell.exe -noExit -Command "Import-Module '%PSSpace%\PSNet' "

首先在其中一个PowerShell窗口中,指定端口用Receive-TCPMessage函数在制定端口监听,等待接受数据

Receive-TCPMessage 8080

在另外一个窗口中向上面的端口发送数据:

Send-TCPMessage 127.0.0.1 8080 “This a Message Send from PSNet!”

会发现这个进程发送消息后,前一个进程能收到相应的消息,消息中如果有空格需要用双引号包括确保PowerShell解释引擎知道这是一个完整的参数。这两个小函数虽然功能简单,而且其中的消息使用ASCII的方式发送的,这是为了给大家演示发送和接收的效果,在真正的实际环境中还是有问题的,但是这两个函数将会在后续的功能中起到很重要的作用,使用PowerShell发送TCP和接收TCP报文将会用到,也将会在后续的文章中进行改进。

作者: 付海军
出处:http://fuhj02.cnblogs.com
版权:本文版权归作者和博客园共有
转载:欢迎转载,为了保存作者的创作热情,请按要求【转载】,谢谢
要求:未经作者同意,必须保留此段声明;必须在文章中给出原文连接且保证内容完整!否则必究法律责任!
个人网站: http://txj.shell.tor.hu/

转载于:https://www.cnblogs.com/fuhj02/archive/2012/10/16/2725609.html

PowerShell收发TCP消息包相关推荐

  1. TCP 数据收发过程抓包分析

    本文简单对 TCP 协议的三次握手.数据传输.四次挥手过程进行抓包分析. 一. 抓包准备 首先本地通过套接字实现一个 TCP 通信,然后通过 Wireshark 抓包,套接字通信代码如下: Serve ...

  2. tcp协议缓冲区溢出_关于TCP 粘包拆包,你了解吗?

    一.什么是粘包拆包? 粘包拆包是TCP协议传输中一种现象概念.TCP是传输层协议,他传输的是"流"式数据,TCP并不知道传输是哪种业务数据,或者说,并不关心.它只是根据缓冲区状况将 ...

  3. 计网 - TCP 实战:如何进行 TCP 抓包调试?

    文章目录 Pre 接口列表 开启捕获功能 观察 TCP 协议 消息视图 观察 HTTP 协议 过滤和筛选 报文颜色 总结 QA: 请你用自己最熟悉的语言,写一个 UDP 连接程序,然后用 Wiresh ...

  4. TCP粘包问题分析和解决(全)

    TCP通信粘包问题分析和解决(全) 在socket网络程序中,TCP和UDP分别是面向连接和非面向连接的.因此TCP的socket编程,收发两端(客户端和服务器端)都要有成对的socket,因此,发送 ...

  5. TCP 粘包和拆包及解决方案

    TCP 粘包和拆包基本介绍 1.TCP 是面向连接的,面向流的,提供高可靠性服务.收发两端(客户端和服务器端)都要有一一成对的 socket,因此,发送端为了将多个发给接收端的包,更有效的发给对方,使 ...

  6. Java基础之《netty(28)—TCP粘包拆包原理》

    一.基本介绍 1.TCP是面向连接的,面向流的,提供高可靠性服务.收发两端(客户端和服务器端)都要有一一成对的socket,因此,发送端为了将多个发给接收端的包,更有效的发给对方,使用了优化方法(Na ...

  7. 20-Netty TCP 粘包和拆包及解决方案

    TCP粘包和拆包的基本介绍 TCP是面向连接的, 面向流的, 提供可靠性服务, 收发两端(客户端和服务器端) 都有一一成对的Socket,因此发送端为了将多个发给接收端的包, 更有效的发给对方, 使用 ...

  8. TCP粘包|拆包和解决方案

    1 产生原因 TCP是面向连接的,面向流的,提供高可靠性服务.收发两端(客户端和服务端)都要有一一成对的socket,因此,发送端为了将多个发给接收端的包,更有效的发给对方,使用了优化算法(Nagle ...

  9. tcp 粘包 丢包 解决方案

    1.分析tcp粘包和丢包的原因 发送数据的时候有  发送缓冲区senBuff, 接收数据的时候有  接收缓冲区recvBuff, 假如接收数据方一直不recv, 则recvBuff就会堆满, 这个时候 ...

最新文章

  1. 考勤排班_如何设置钉钉做2休1等考勤?
  2. 无法relay信件处理一例
  3. python filter
  4. Supplemental Logging
  5. postgres 支持的线程数_线程池被打满了怎么处理呢,你是否真的了解线程池?
  6. C++ 不懂的地方 记录01
  7. java requestparams_java – 如何验证@RequestParams不为空?
  8. 百搭电商背景素材,设计师应急PSD分层模板
  9. linux 查看磁盘空间_【linux磁盘划分】3分钟看懂!
  10. Codeforces 241B Friends 字典树
  11. nginx 代理部署前端项目
  12. 汉字大全20000个字_男生秀恩爱的说说简短八字 小情话大全暖心8个字
  13. 2021年最牛福利!阿里巴巴社招面试真题惨遭外泄,现在全部分享给大家!
  14. oracle 10g rac 配置物理dataguard系列4,配置 Oracle 10g 单实例物理dataguard和逻辑standby...
  15. 从0开始创建一个MFC单文档工程
  16. [转载]Eclipse开发工具简介
  17. 多旋翼飞行器设计与控制(二)—— 基本组成
  18. OKL4虚拟化技术跟踪
  19. python中print无法打印在控制台输出_Pycharm Python控制台不打印输出
  20. 进一步分析51job上宁波财务和IT的数据的招聘数据

热门文章

  1. jieba分词_自然语言NLP必备(1),jieba工具 5 行代码对整篇文章分词
  2. IC/FPGA 技术交流
  3. Save a tree as XML using XmlSerializer
  4. java指令重排序代码演示
  5. [译] Vue.js 优雅地集成第三方 JavaScript
  6. SpringBoot之get请求404
  7. android 发送http请求
  8. 深入理解C#第三版部分内容
  9. Curator-01
  10. c/c++获取文件大小的方法