PowerShell中,可以使用以下命令来发送和接收TCP数据 发送IPv4 TCP UDP数据 接收IPv4 TCP数据 发送IPv6 TCP UDP数据 接收IPv6 TCP数据 ASCII编码 HEX(十六进制) 二进制

在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数据的发送和接收。


 

posted @ 2024-02-07 10:10  suv789  阅读(229)  评论(0编辑  收藏  举报