首页 > 系统相关 >PowerShell中,可以使用以下命令来发送和接收TCP数据 发送IPv4 TCP数据 接收IPv4 TCP数据 发送IPv6 TCP数据 接收IPv6 TCP数据 ASCII编码 HE

PowerShell中,可以使用以下命令来发送和接收TCP数据 发送IPv4 TCP数据 接收IPv4 TCP数据 发送IPv6 TCP数据 接收IPv6 TCP数据 ASCII编码 HE

时间:2024-02-07 10:23:39浏览次数:28  
标签:tcpClient 十六进制 System TCP bytesToSend IPv4 IPv6 Net

在PowerShell中,可以使用以下命令来发送和接收TCP数据:

  1. 发送IPv4 TCP数据:
Copy Code
$remoteIPAddress = "192.168.0.1"
$remotePort = 80
$tcpClient = New-Object System.Net.Sockets.TcpClient($remoteIPAddress, $remotePort)
$networkStream = $tcpClient.GetStream()
$bytesToSend = [System.Text.Encoding]::ASCII.GetBytes("Hello, World!")
$networkStream.Write($bytesToSend, 0, $bytesToSend.Length)
$tcpClient.Close()

上述代码会建立到远程IP地址为“192.168.0.1”、端口为“80”的TCP连接,并向远程主机发送“Hello, World!”消息。

  1. 接收IPv4 TCP数据:
Copy Code
$localIPAddress = "192.168.0.100"
$localPort = 12345
$listener = New-Object System.Net.Sockets.TcpListener([System.Net.IPAddress]::Parse($localIPAddress), $localPort)
$listener.Start()
$tcpClient = $listener.AcceptTcpClient()
$networkStream = $tcpClient.GetStream()
$bytesReceived = New-Object byte[] 1024
$networkStream.Read($bytesReceived, 0, $bytesReceived.Length) | Out-Null
$message = [System.Text.Encoding]::ASCII.GetString($bytesReceived).TrimEnd([char]0)
$tcpClient.Close()
$listener.Stop()
$message

上述代码会监听本地IP地址为“192.168.0.100”、端口为“12345”的TCP连接,并等待来自远程主机的连接请求。一旦收到连接请求,它将接收来自远程主机的消息并输出到控制台。

  1. 发送IPv6 TCP数据:
Copy Code
$remoteIPAddress = "fe80:0:0:0:1c84:d45f:8b31:1c6d"
$remotePort = 80
$tcpClient = New-Object System.Net.Sockets.TcpClient([System.Net.Sockets.AddressFamily]::InterNetworkV6)
$tcpClient.Client.Connect($remoteIPAddress, $remotePort)
$networkStream = $tcpClient.GetStream()
$bytesToSend = [System.Text.Encoding]::ASCII.GetBytes("Hello, World!")
$networkStream.Write($bytesToSend, 0, $bytesToSend.Length)
$tcpClient.Close()

上述代码会建立到远程IPv6地址为“fe80:0:0:0:1c84:d45f:8b31:1c6d”、端口为“80”的TCP连接,并向远程主机发送“Hello, World!”消息。

  1. 接收IPv6 TCP数据:
Copy Code
$localIPAddress = "::1"
$localPort = 12345
$listener = New-Object System.Net.Sockets.TcpListener([System.Net.IPAddress]::Parse($localIPAddress), $localPort)
$listener.Server.SetSocketOption([System.Net.Sockets.SocketOptionLevel]::IPv6, [System.Net.Sockets.SocketOptionName]::IPv6Only, $false)
$listener.Start()
$tcpClient = $listener.AcceptTcpClient()
$networkStream = $tcpClient.GetStream()
$bytesReceived = New-Object byte[] 1024
$networkStream.Read($bytesReceived, 0, $bytesReceived.Length) | Out-Null
$message = [System.Text.Encoding]::ASCII.GetString($bytesReceived).TrimEnd([char]0)
$tcpClient.Close()
$listener.Stop()
$message

上述代码会监听本地IPv6地址为“::1”、端口为“12345”的TCP连接,并等待来自远程主机的连接请求。一旦收到连接请求,它将接收来自远程主机的消息并输出到控制台。

 

PowerShell中,你可以使用以下命令来发送和接收以十六进制表示的IPv4 TCP数据:

发送以十六进制表示的IPv4 TCP数据:

powershellCopy Code
# 设置远程IP地址和端口
$remoteIPAddress = "192.168.0.1"
$remotePort = 80

# 将十六进制字符串转换为字节数组
$hexData = "48656C6C6F2C20576F726C6421"  # 这里使用ASCII编码的 "Hello, World!" 的十六进制表示
$bytesToSend = [byte[]]::new($hexData.Length / 2)
for ($i = 0; $i -lt $hexData.Length; $i += 2) {
    $bytesToSend[$i / 2] = [convert]::ToByte($hexData.Substring($i, 2), 16)
}

# 建立TCP连接并发送数据
$tcpClient = New-Object System.Net.Sockets.TcpClient($remoteIPAddress, $remotePort)
$networkStream = $tcpClient.GetStream()
$networkStream.Write($bytesToSend, 0, $bytesToSend.Length)
$tcpClient.Close()

接收以十六进制表示的IPv4 TCP数据:

powershellCopy Code
# 设置本地IP地址和端口
$localIPAddress = "192.168.0.100"
$localPort = 12345

# 监听TCP连接并接收数据
$listener = New-Object System.Net.Sockets.TcpListener([System.Net.IPAddress]::Parse($localIPAddress), $localPort)
$listener.Start()
$tcpClient = $listener.AcceptTcpClient()
$networkStream = $tcpClient.GetStream()
$bytesReceived = New-Object byte[] 1024
$numberOfBytesRead = $networkStream.Read($bytesReceived, 0, $bytesReceived.Length)
$hexString = ""
for ($i = 0; $i -lt $numberOfBytesRead; $i++) {
    $hexString += $bytesReceived[$i].ToString("X2")
}
$tcpClient.Close()
$listener.Stop()
$hexString

 

PowerShell中,你可以使用以下命令来发送和接收以ASCII编码表示的IPv4 TCP数据:

发送以ASCII编码表示的IPv4 TCP数据:

powershellCopy Code
# 设置远程IP地址和端口
$remoteIPAddress = "192.168.0.1"
$remotePort = 80

# 将ASCII字符串转换为字节数组
$message = "Hello, World!"
$bytesToSend = [System.Text.Encoding]::ASCII.GetBytes($message)

# 建立TCP连接并发送数据
$tcpClient = New-Object System.Net.Sockets.TcpClient($remoteIPAddress, $remotePort)
$networkStream = $tcpClient.GetStream()
$networkStream.Write($bytesToSend, 0, $bytesToSend.Length)
$tcpClient.Close()

接收以ASCII编码表示的IPv4 TCP数据:

powershellCopy Code
# 设置本地IP地址和端口
$localIPAddress = "192.168.0.100"
$localPort = 12345

# 监听TCP连接并接收数据
$listener = New-Object System.Net.Sockets.TcpListener([System.Net.IPAddress]::Parse($localIPAddress), $localPort)
$listener.Start()
$tcpClient = $listener.AcceptTcpClient()
$networkStream = $tcpClient.GetStream()
$bytesReceived = New-Object byte[] 1024
$numberOfBytesRead = $networkStream.Read($bytesReceived, 0, $bytesReceived.Length)
$message = [System.Text.Encoding]::ASCII.GetString($bytesReceived, 0, $numberOfBytesRead)
$tcpClient.Close()
$listener.Stop()
$message

上述代码示例中,我们直接使用ASCII编码的字符串进行发送和接收。在发送时,我们使用[System.Text.Encoding]::ASCII.GetBytes($message)将ASCII编码的字符串转换为字节数组进行发送。在接收时,我们使用[System.Text.Encoding]::ASCII.GetString($bytesReceived, 0, $numberOfBytesRead)将接收到的字节数组转换回ASCII编码的字符串。

 

PowerShell中,你可以发送多种类型的数据,不仅限于ASCII编码和十六进制格式。下面列举了一些常见的数据表示形式:

  1. Base64编码:Base64编码是一种将二进制数据转换为文本字符串的编码方式。你可以使用[System.Convert]::ToBase64String($bytes)将字节数组转换为Base64字符串发送,接收时使用[System.Convert]::FromBase64String($base64String)将Base64字符串转换回字节数组。

  2. UTF-8编码:UTF-8编码是一种用于Unicode字符的变长字符编码。你可以使用[System.Text.Encoding]::UTF8.GetBytes($message)将字符串编码为UTF-8格式的字节数组发送,接收时使用[System.Text.Encoding]::UTF8.GetString($bytesReceived, 0, $numberOfBytesRead)将接收到的字节数组解码为字符串。

  3. Binary格式:直接发送二进制数据,不经过编码转换。

下面是一些示例代码:

发送以Base64编码表示的数据:

powershellCopy Code
# 将字节数组转换为Base64字符串
$base64String = [System.Convert]::ToBase64String($bytes)

# 发送Base64编码的数据
$networkStream.Write([System.Text.Encoding]::ASCII.GetBytes($base64String), 0, $base64String.Length)

发送以UTF-8编码表示的数据:

powershellCopy Code
# 设置消息内容
$message = "你好,世界!"

# 将UTF-8编码的消息转换为字节数组
$bytesToSend = [System.Text.Encoding]::UTF8.GetBytes($message)

# 发送UTF-8编码的数据
$networkStream.Write($bytesToSend, 0, $bytesToSend.Length)

发送二进制数据:

powershellCopy Code
# 直接发送二进制数据
$networkStream.Write($bytesToSend, 0, $bytesToSend.Length)

这些示例展示了如何在PowerShell中发送不同类型的数据,包括Base64编码、UTF-8编码和二进制数据。根据需求,你可以选择合适的数据表示形式来进行网络通信。

 


PowerShell中,你可以使用以下命令来发送和接收以十六进制表示的IPv4 UDP数据:

发送以十六进制表示的IPv4 UDP数据:

powershellCopy Code
# 设置远程IP地址和端口
$remoteIPAddress = "192.168.0.1"
$remotePort = 12345

# 将十六进制字符串转换为字节数组
$hexString = "48656C6C6F2C20576F726C6421"  # 这里使用 "Hello, World!" 的十六进制表示
$bytesToSend = [System.Management.Automation.LanguagePrimitives]::ConvertTo([byte[]][char[]] $hexString.ToCharArray(), [byte[]])

# 创建UDP客户端
$udpClient = New-Object System.Net.Sockets.UdpClient

# 发送数据
$udpClient.Send($bytesToSend, $bytesToSend.Length, $remoteIPAddress, $remotePort)
$udpClient.Close()

接收以十六进制表示的IPv4 UDP数据:

powershellCopy Code
# 设置本地IP地址和端口
$localIPAddress = "192.168.0.100"
$localPort = 54321

# 创建UDP监听器
$udpClient = New-Object System.Net.Sockets.UdpClient($localPort)

# 接收数据
$receivedBytes = $udpClient.Receive([ref][System.Net.IPEndPoint]::new([System.Net.IPAddress]::Any, 0))
$hexString = [System.BitConverter]::ToString($receivedBytes).Replace("-", "")
$udpClient.Close()
$hexString

在上述代码示例中,我们使用[System.Management.Automation.LanguagePrimitives]::ConvertTo将十六进制字符串转换为字节数组进行发送。在接收时,我们使用[System.BitConverter]::ToString($receivedBytes).Replace("-", "")将接收到的字节数组转换回十六进制字符串。

这样就可以在PowerShell中实现以十六进制表示的IPv4 UDP数据的发送和接收。


PowerShell中,你可以使用以下命令来发送和接收以十六进制表示的IPv6 UDP数据:

发送以十六进制表示的IPv6 UDP数据:

powershellCopy Code
# 设置远程IP地址和端口
$remoteIPAddress = "2001:0db8:85a3:0000:0000:8a2e:0370:7334"
$remotePort = 12345

# 将十六进制字符串转换为字节数组
$hexString = "48656C6C6F2C20576F726C6421"  # 这里使用 "Hello, World!" 的十六进制表示
$bytesToSend = [System.Management.Automation.LanguagePrimitives]::ConvertTo([byte[]][char[]] $hexString.ToCharArray(), [byte[]])

# 创建IPv6 UDP客户端
$udpClient = New-Object System.Net.Sockets.UdpClient

# 发送数据
$udpClient.Send($bytesToSend, $bytesToSend.Length, $remoteIPAddress, $remotePort)
$udpClient.Close()

接收以十六进制表示的IPv6 UDP数据:

powershellCopy Code
# 设置本地IP地址和端口
$localIPAddress = "2001:0db8:85a3:0000:0000:8a2e:0370:7335"
$localPort = 54321

# 创建IPv6 UDP监听器
$udpClient = New-Object System.Net.Sockets.UdpClient
$udpClient.Client = New-Object System.Net.Sockets.Socket([System.Net.Sockets.AddressFamily]::InterNetworkV6, [System.Net.Sockets.SocketType]::Dgram, [System.Net.Sockets.ProtocolType]::Udp)
$udpClient.Client.Bind(([System.Net.IPEndPoint]::new([System.Net.IPAddress]::Parse($localIPAddress), $localPort)))

# 接收数据
$receivedBytes = $udpClient.Receive([ref][System.Net.IPEndPoint]::new([System.Net.IPAddress]::Any, 0))
$hexString = [System.BitConverter]::ToString($receivedBytes).Replace("-", "")
$udpClient.Close()
$hexString

在上述代码示例中,我们创建了IPv6 UDP客户端,并使用[System.Net.Sockets.AddressFamily]::InterNetworkV6来指定IPv6地址族。在接收时,我们同样使用[System.BitConverter]::ToString($receivedBytes).Replace("-", "")将接收到的字节数组转换回十六进制字符串。

这样就可以在PowerShell中实现以十六进制表示的IPv6 UDP数据的发送和接收。


 

标签:tcpClient,十六进制,System,TCP,bytesToSend,IPv4,IPv6,Net
From: https://www.cnblogs.com/suv789/p/18010682

相关文章

  • Java之UDP,TCP的详细解析
     练习四:文件名重复publicclassUUIDTest{publicstaticvoidmain(String[]args){Stringstr=UUID.randomUUID().toString().replace("-","");System.out.println(str);//9f15b8c356c54f55bfcb0ee3023fce8a}}```publicclassClient{public......
  • 统信UOS操作系统上禁用IPv6
    原文链接:统信UOS操作系统上禁用IPv6hello,大家好啊!继之前我们讨论了如何在麒麟KYLINOS上禁用IPv6之后,今天我要给大家带来的是在统信UOS操作系统上禁用IPv6的方法。IPv6是最新的网络通信协议,但在某些特定的网络环境或测试场景中,可能需要禁用IPv6以确保兼容性或满足其他需求。本文将介......
  • Nginx配置TCP/UDP流量转发
    #usernobody;worker_processes1;#error_loglogs/error.log;#error_loglogs/error.lognotice;#error_loglogs/error.loginfo;#pidlogs/nginx.pid;events{worker_connections1024;}stream{log_formatmain'$remote_addr[$tim......
  • TCP 三次握手的性能优化
    今天分析下TCP三次握手中有哪些可以优化的地方,进而提升握手的性能。客户端的优化三次握手的首要目的就是为了同步序列号。有了序列号才可以进行后续的可靠性的传输。在TCP中有很多功能都是依赖序列号实现的,比如流量控制、消息重传等。在三次握手中序列号的同步是通过SYN报文同......
  • 【转帖】杨亚洲 tcprstat工具
    https://github.com/y123456yz/tcprstat centos6.5yuminstallperfyum-yinstallbisonyaccyum-yinstallflexyuminstallpatchyuminstallglibc-staticautoreconf-fvi./configuremake&makeinstall命令行参数:-p:端口-l:ip-o:打印时延超过-T参数指定的包的数......
  • [转]TCP的keep-alive
    TCP的keep-alive可以在不增加服务器处理逻辑的前提下,检测客户端连接是否中断/proc/sys/net/ipv4/tcp_keepalive_time开始首次KeepAlive探测前的TCP空闭时间/proc/sys/net/ipv4/tcp_keepalive_intvl两次KeepAlive探测间的时间间隔/proc/sys/net/ipv4/tcp_keepalive_probes判定......
  • 问题:在TCP的拥塞控制中,什么时候会使拥塞窗口重置为1?
    问题:在TCP的拥塞控制中,什么时候会使拥塞窗口重置为1?A:发生拥塞时;B:拥塞窗口超过慢开始门限时;C:分组超时时;D:慢开始门限重置为拥塞窗口的一半时参考答案如图所示......
  • Tcpdump和Wireshark的学习与使用
    Tcpdump和Wireshark的学习与使用背景2024年2月份农历小年时。同事为了解决一个应用忽快忽慢的问题去了上海客户那里。第二天自己在理发时(周末)接到了他的电话,说到了一些问题情况。比较明确的是,应用和数据库的请求经常出现20ms左右的高延迟的情况。其实子很早之前学习过tc......
  • DotNetty 封装的TcpClient
    .net里 Netty资料不多,做个记录publicclassNetworkCommunicator:ICommunicator{#regionNetty本来想用静态,后来觉得多个client公用一个netty可能分不清返回的数据,先这样,后期要是吃资源再优化Bootstrap_NettyBoot;IEventLoopGroup_NettyEventLoop;......
  • CH392作服务器TCP Server应用配置使用
    CH392工作在TCPServer模式时,参考手册说明需要打开监听Socket端口,也要设置数据连接Socket端口,注意数据连接Socket的源端口和监听Socket的源端口一致。 配置TCPServerSocket数代码处理如下:voidInitCH392InfParam(void){memset(&CH392Inf,0,sizeof(CH392Inf......