Skip to content

Commit 2f882d0

Browse files
author
0xfab1
committed
Add initial Pen Plotter documentation with a TODO note
1 parent 35b4fa5 commit 2f882d0

File tree

2 files changed

+168
-0
lines changed

2 files changed

+168
-0
lines changed
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
# Pen Plotter
2+
3+
TODO

docs/tech/scripts/powershell/snippets.md

Lines changed: 165 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,3 +16,168 @@ One-liner to convert all PNG Images of a folder to JPG images:
1616
``` ps1
1717
Get-ChildItem -Path (Get-Location) -Filter *.png | ForEach-Object { $img=[System.Drawing.Image]::FromFile($_.FullName); $jpg=([System.IO.Path]::ChangeExtension($_.FullName, '.jpg')); $enc=[System.Drawing.Imaging.ImageCodecInfo]::GetImageEncoders()|?{$_.MimeType -eq 'image/jpeg'}; $par=New-Object System.Drawing.Imaging.EncoderParameters(1); $par.Param[0]=New-Object System.Drawing.Imaging.EncoderParameter([System.Drawing.Imaging.Encoder]::Quality,90); $img.Save($jpg,$enc,$par); $img.Dispose() }; Write-Output 'Conversion complete.'
1818
```
19+
20+
## Netzwerk
21+
22+
### UDP
23+
24+
#### UDP Sender
25+
26+
``` ps1
27+
$udpSender = New-Object System.Net.Sockets.UdpClient
28+
$bytes = [System.Text.Encoding]::UTF8.GetBytes("Hallo vom Client")
29+
$udpSender.Send($bytes, $bytes.Length, "1.2.3.5", 12345)
30+
$udpSender.Close()
31+
```
32+
33+
#### UDP Listener
34+
35+
``` ps1
36+
$udpClient = New-Object System.Net.Sockets.UdpClient 12345
37+
$remoteEP = New-Object System.Net.IPEndPoint ([System.Net.IPAddress]::Any, 0)
38+
39+
Write-Host "Lausche auf UDP-Port 12345..."
40+
41+
while ($true) {
42+
$data = $udpClient.Receive([ref]$remoteEP)
43+
$text = [System.Text.Encoding]::UTF8.GetString($data)
44+
Write-Host "Empfangen von $($remoteEP.Address): $text"
45+
}
46+
```
47+
48+
#### UDP Check
49+
50+
``` ps1
51+
Get-NetUDPEndpoint | Select-Object -Property LocalAddress, LocalPort, OwningProcess | Sort-Object LocalPort
52+
```
53+
54+
### With iPerf
55+
56+
UDP Download
57+
58+
``` ps1
59+
iperf3.exe -c <server> -u -P 10 -4 -R
60+
```
61+
62+
UDP Upload
63+
64+
``` ps1
65+
iperf3.exe -c <server> -u -P 10 -4
66+
```
67+
68+
### TCP
69+
70+
#### TCP Connect
71+
72+
``` ps1
73+
try { (New-Object Net.Sockets.TcpClient).Connect("1.2.3.4", 7600); "offen" } catch { "zu" }
74+
```
75+
76+
#### TCP Firewall check
77+
78+
``` ps1
79+
$tcp = New-Object System.Net.Sockets.TcpClient
80+
$tcp.ReceiveTimeout = 3000
81+
$tcp.SendTimeout = 3000
82+
$sw = [System.Diagnostics.Stopwatch]::StartNew()
83+
try {
84+
$tcp.Connect("1.2.3.4", 7600)
85+
"Port offen"
86+
} catch {
87+
$sw.Stop()
88+
if ($sw.ElapsedMilliseconds -ge 2500) {
89+
"Möglicherweise gefiltert (Timeout)"
90+
} else {
91+
"Port wahrscheinlich geschlossen (RST empfangen)"
92+
}
93+
}
94+
```
95+
96+
#### TCP Listener
97+
98+
``` ps1
99+
$listener = [System.Net.Sockets.TcpListener]::Create(7600)
100+
$listener.Start()
101+
Write-Host "TCP-Listener läuft auf Port 7600..."
102+
103+
while ($true) {
104+
if ($listener.Pending()) {
105+
$client = $listener.AcceptTcpClient()
106+
Write-Host "Neue Verbindung: $($client.Client.RemoteEndPoint)"
107+
$client.Close()
108+
}
109+
Start-Sleep -Milliseconds 500
110+
}
111+
```
112+
113+
#### TCP Check
114+
115+
``` ps1
116+
Get-NetTCPConnection -State Listen | Select-Object -Property LocalAddress, LocalPort, OwningProcess | Sort-Object LocalPort
117+
```
118+
119+
#### TCP Check with iPerf
120+
121+
TCP Download
122+
123+
``` ps1
124+
iperf3.exe -c <server> -P 10 -4 -R
125+
```
126+
127+
TCP Upload
128+
129+
``` ps1
130+
iperf3.exe -c <server> -P 10 -4
131+
```
132+
133+
### Multicast
134+
135+
Checks
136+
137+
- Port must be allowed (check Firewall local or in network)
138+
- Verify that the network infrastructure (switches, routers) allows multicast (no filtering/IGMP blocking).
139+
- Ensure both sender and receiver are on the same LAN/subnet (unless you have multicast routing set up).
140+
- Use a multicast address in the range 224.0.0.0 to 239.255.255.255
141+
142+
#### Listener
143+
144+
``` ps1
145+
$groupAddress = "239.255.0.1"
146+
$port = 5001
147+
148+
$udpClient = New-Object System.Net.Sockets.UdpClient
149+
$localEp = New-Object System.Net.IPEndPoint ([System.Net.IPAddress]::Any, $port)
150+
$udpClient.Client.SetSocketOption([System.Net.Sockets.SocketOptionLevel]::Socket, [System.Net.Sockets.SocketOptionName]::ReuseAddress, $true)
151+
$udpClient.ExclusiveAddressUse = $false
152+
$udpClient.Client.Bind($localEp)
153+
154+
$udpClient.JoinMulticastGroup([System.Net.IPAddress]::Parse($groupAddress))
155+
156+
Write-Host "Listening for multicast on $groupAddress:$port..."
157+
while ($true) {
158+
$received = $udpClient.Receive([ref]$localEp)
159+
$text = [System.Text.Encoding]::UTF8.GetString($received)
160+
Write-Host "Received from $($localEp.Address): $text"
161+
}
162+
```
163+
164+
### Sender
165+
166+
``` ps1
167+
$groupAddress = "239.255.0.1"
168+
$port = 5001
169+
$message = "Hello multicast from $(hostname)"
170+
$remoteIp = [System.Net.IPAddress]::Parse($groupAddress)
171+
$remoteEp = New-Object System.Net.IPEndPoint $remoteIp, $port
172+
173+
$udpClient = New-Object System.Net.Sockets.UdpClient
174+
$bytes = [System.Text.Encoding]::UTF8.GetBytes($message)
175+
176+
for ($i = 1; $i -le 10; $i++) {
177+
$udpClient.Send($bytes, $bytes.Length, $remoteEp) | Out-Null
178+
Write-Host "Sent: $message"
179+
Start-Sleep -Seconds 1
180+
}
181+
182+
$udpClient.Close()
183+
```

0 commit comments

Comments
 (0)