목차
- 파이썬 TCP 서버 구성 및 파일 수신 예제 이전 포스팅 참고 학습
- 파이썬 바이트 값으로 파일 저장하기 예제 이전 포스팅 참고 학습
- 윈도우 10 파워쉘에서 현재 화면 스크린샷 비트맵 구하기 예제 이전 포스팅 참고 학습
- 윈도우 10 파워쉘에서 키보드 클릭 이벤트 탐지 예제 이전 포스팅 참고 학습
- 윈도우 10 파워쉘에서 키보드 클릭시 화면 스크린샷 비트맵 구하기 예제
- 윈도우 10 파워쉘에서 비트맵 정보 TCP 서버에 전송하여 파일 저장하기 예제
파이썬 TCP 서버 구성 및 파일 수신 예제 이전 포스팅 참고 학습
파이썬을 사용하여 TCP 서버를 구성하고, 클라이언트로부터 파일을 수신하는 방법을 배워보세요. 네트워크 통신을 통해 파일을 주고받는 원리와 파이썬 소켓 프로그래밍을 통한 서버-클라이언트 연결을 학습할 수 있습니다. 이전 포스팅을 참고하여 더 자세한 예제와 코드를 확인해보세요.
2023.08.12 - [Python/os] - [Python] socket TCP 서버 구성하기 예제(TCP, SO_REUSEADDR)
파이썬 바이트 값으로 파일 저장하기 예제 이전 포스팅 참고 학습
파이썬을 사용하여 바이너리 데이터를 읽어와 파일로 저장하는 방법을 배워보세요. 파일 입출력과 바이트 데이터 다루기를 통해 다양한 데이터 포맷을 파일로 저장하는 방법을 익힐 수 있습니다. 이전 포스팅을 참고하여 더 자세한 내용과 코드를 확인해보세요.
2023.08.06 - [Python/os] - [Python] os.write 파일에 내용 쓰기 예제(기존 파일 마지막 추가하기)
윈도우 10 파워쉘에서 현재 화면 스크린샷 비트맵 구하기 예제 이전 포스팅 참고 학습
윈도우 10 파워쉘을 사용하여 현재 화면을 스크린샷하여 비트맵 이미지를 구하는 방법을 배워보세요. 윈도우 API와 파워쉘을 결합하여 화면 캡쳐와 이미지 처리를 통해 다양한 작업을 수행할 수 있습니다. 이전 포스팅을 참고하여 더 구체적인 내용과 예제 코드를 확인해보세요.
2023.08.28 - [Window] - [Window] 윈도우 10 화면 캡쳐 스크립트 작성 예제(powershell)
윈도우 10 파워쉘에서 키보드 클릭 이벤트 탐지 예제 이전 포스팅 참고 학습
파워쉘을 사용하여 키보드 클릭 이벤트를 탐지하는 방법을 배워보세요. 사용자의 키 입력을 감지하고 처리하는 스크립트를 작성하여 키보드 동작을 모니터링할 수 있습니다. 이전 포스팅을 참고하여 더 자세한 예제와 코드를 확인해보세요.
2023.08.25 - [Window] - [Window] 윈도우 10 키보드 누름 이벤트 확인하기 예제(Powershell)
윈도우 10 파워쉘에서 키보드 클릭시 화면 스크린샷 비트맵 구하기 예제
아래는 사용자가 윈도우 환경에서 특정 K키를 입력했을 때 현재 화면의 스크린샷 비트맵을 이미지 파일로 저장한 후 이파일을 다시 읽어 바이트를 읽는 예제입니다. 이 바이트 값을 이제 TCP 서버에 전송할 예정입니다.
Add-Type -TypeDefinition @'
using System;
using System.Runtime.InteropServices;
public class GlobalKeyListener {
[DllImport("user32.dll")]
public static extern short GetAsyncKeyState(int vKey);
public static bool IsKeyPressed(int vKey) {
return (GetAsyncKeyState(vKey) & 0x8000) != 0;
}
}
'@
Add-Type -AssemblyName System.Drawing
# K키가 눌릴 때까지 대기
while ($true) {
if ([GlobalKeyListener]::IsKeyPressed(75)) { # 75 corresponds to the 'K' key
$timestamp = Get-Date -Format "yyyyMMddHHmmss"
$fileName = "C:\Users\wonseok\Documents\tmp.png"
$screen = [System.Windows.Forms.Screen]::PrimaryScreen.Bounds
$width = $screen.Width
$height = $screen.Height
$bitmap = New-Object System.Drawing.Bitmap $width, $height
$graphics = [System.Drawing.Graphics]::FromImage($bitmap)
$graphics.CopyFromScreen(0, 0, 0, 0, $bitmap.Size)
$bitmap.Save($fileName)
$graphics.Dispose()
$bitmap.Dispose()
Write-Host "Screenshot taken and saved as $fileName"
break
}
Start-Sleep -Milliseconds 100
}
# 파일 읽기
$fileBytes = [System.IO.File]::ReadAllBytes($fileName)
$fileSize = $fileBytes.Length
$fileSizeBytes = [BitConverter]::GetBytes($fileSize)
윈도우 10 파워쉘에서 비트맵 정보 TCP 서버에 전송하여 파일 저장하기 예제
비트맵 바이트 값을 전송하기 이전에 먼저 서버에 전체 바이트 값의 크기(4byte)를 전송하고 이후에 바이트 값을 전송하여 서버가 파일로 저장하는 예제입니다.
우선 아래는 파이썬 서버측의 코드입니다.
import socket
def receive_file(client_socket, file_size, file_path):
received_data = b""
while len(received_data) < file_size:
data = client_socket.recv(1024)
if not data:
break
received_data += data
with open(file_path, 'wb') as file:
file.write(received_data)
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
server_socket.bind(('0.0.0.0', 9999))
server_socket.listen(5)
client_socket, client_addr = server_socket.accept()
file_size = client_socket.recv(4) # Read 4 bytes for file size
file_size = int.from_bytes(file_size, byteorder='little') # Convert bytes to integer
# 파일 내용 받아서 파일로 저장
receive_file(client_socket, file_size, '/tmp/client_screenshot.png')
print('File received and saved as /tmp/client_screenshot.png')
그리고 아래는 파워쉘에서 위 예제에서 구한 바이트 값을 전송하는 예제입니다. 바이트 총 크기(4byte)를 먼저 보내고 뒤로 바이트값을 전송합니다.
Add-Type -TypeDefinition @'
using System;
using System.Runtime.InteropServices;
public class GlobalKeyListener {
[DllImport("user32.dll")]
public static extern short GetAsyncKeyState(int vKey);
public static bool IsKeyPressed(int vKey) {
return (GetAsyncKeyState(vKey) & 0x8000) != 0;
}
}
'@
Add-Type -AssemblyName System.Drawing
# K키가 눌릴 때까지 대기
while ($true) {
if ([GlobalKeyListener]::IsKeyPressed(75)) { # 75 corresponds to the 'K' key
$timestamp = Get-Date -Format "yyyyMMddHHmmss"
$fileName = "C:\Users\wonseok\Documents\tmp.png"
$screen = [System.Windows.Forms.Screen]::PrimaryScreen.Bounds
$width = $screen.Width
$height = $screen.Height
$bitmap = New-Object System.Drawing.Bitmap $width, $height
$graphics = [System.Drawing.Graphics]::FromImage($bitmap)
$graphics.CopyFromScreen(0, 0, 0, 0, $bitmap.Size)
$bitmap.Save($fileName)
$graphics.Dispose()
$bitmap.Dispose()
Write-Host "Screenshot taken and saved as $fileName"
break
}
Start-Sleep -Milliseconds 100
}
# 파일 읽기
$fileBytes = [System.IO.File]::ReadAllBytes($fileName)
$fileSize = $fileBytes.Length
$fileSizeBytes = [BitConverter]::GetBytes($fileSize)
# TCP 서버에 연결
$serverIP = "172.16.3.31"
$serverPort = 9999
$client = New-Object System.Net.Sockets.TcpClient
$client.Connect($serverIP, $serverPort)
# 총 파일 크기 전송 (4byte)
$client.GetStream().Write($fileSizeBytes, 0, $fileSizeBytes.Length)
# 파일 바이트 값 전송
$client.GetStream().Write($fileBytes, 0, $fileBytes.Length)
$client.Close()
Write-Host "File size and content sent to the server."
아래와 같이 서버측에서 클라이언트가 보낸 화면 사진이 저장됩니다.