От два дни се боря с Windows Sockets, не мога просто да използвам запис в сокет, както е в Linux. Искам да напиша свой собствен шелкод и си играя как да пренасоча stdout, stdin към socket handle (оттам идват моите игри). Използвам Windows 7 x64, build 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