Я боролся с Windows Sockets в течение двух дней, не имея возможности просто использовать запись в сокет, как в Linux. Я хочу написать свой собственный шелл-код, и я играю, как перенаправить stdout, stdin на дескриптор сокета (вот откуда мои игры). Я использую Windows 7 x64, при необходимости собери 7601. Вот мой код
#include <windows.h>
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
int main (int argc,char ** argv)
{
// boring code starts
if (argc < 2)
{
printf("Usage getstdhandle <ip> <port> ");
}
WSADATA wsadata;
int result = WSAStartup (MAKEWORD(2,2),&wsadata);
if (result != NO_ERROR)
{
printf("error with wsastartup");
}
struct sockaddr_in server;
server.sin_family = AF_INET;
server.sin_port = htons (atoi(argv[2]));
server.sin_addr.s_addr = inet_addr (argv[1]);
SOCKET soc = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
if (soc == INVALID_SOCKET)
{
printf("Error with creating socket");
}
if (connect(soc,(struct sockaddr *)&server,sizeof(server)) == SOCKET_ERROR)
{
printf("Problem with connecting");
}
// boring code ends
const char * buf = "Tekscik \n"; // know it's not really good in new C standards
const char buf[] = "Test\n"; // not working also, shouldn't have any influence
bool isSent = WriteFile((HANDLE)soc,(LPCVOID)buf,(DWORD)10,NULL,NULL);
DWORD ret = GetLastError();
printf("%.08x",ret);
closesocket(soc);
WSACleanup();
return 0;
}
Вот как я запускаю свою программу
C:\Users\Domin568\Desktop>getstdhandle 192.168.56.1 5555
Tekscik
00000057 <---- Error code in hex
На моей второй машине я просто запускаю nc, чтобы прослушать эти данные следующим образом:
15:14|domin568[21] ~ $ nc -l -v -p 5555
Connection from 192.168.56.101:50328
15:15|domin568[22] ~ $
Я получаю код ошибки 0x57:
ERROR_INVALID_PARAMETER 87 (0x57) Параметр неверен.
Локальный сетевой трафик (любые отправленные данные, чистые рукопожатия соединений и FIN)
Что могло быть причиной этого? Я знаю, что это не лучший способ отправки данных, но MSDN утверждает, что это возможно.
OVERLAPPED ov = {}; BOOL isSent = WriteFile((HANDLE)soc,(LPCVOID)buf,(DWORD)10, 0, &ov);
в этом случае будет работать - person RbMm   schedule 12.05.2017