实验内容】
1.阅读p143-144,理解端口复用技术。
实验环境:
主机A为客户端,操作系统为win7,IP地址为172.16.15.1
主机B为服务端,操作系统为win7,IP地址为172.16.0.15
实验结果:
(1)客户端木马程序发送信息给服务端:
服务器上的控制台,识别到木马程序,回传信息给客户端:
客户端上的控制台:
(2)客户端非木马程序发送信息给服务端:
服务器上的控制台,识别到是非木马程序,回传信息给客户端:
客户端上的控制台:
2.完成p144-146实例,回答实验思考问题。
(2)木马的数据包的特征值是什么?数据包的第一个字符为”y”
(3)服务器代码如下:
#include<stdio.h>
#include<WINSOCK2.H> //加入socket的头文件与链接库
#pragma comment(lib,"Ws2_32.lib") //端口复用程序包含监听与连接两种功能的Socket
void proc(LPVOID d); //工作线程
int main(int argc,char * argv[])
{
WSADATA wsaData;
WSAStartup(MAKEWORD(2,2),&wsaData); //socket版本
SOCKADDR_IN a,b;
//一个是用于外部监听的地址,另一个是接收到accept时用于处理接收的结构
a.sin_family=AF_INET;
a.sin_addr.s_addr=inet_addr(argv[1]);
a.sin_port=htons(80);
SOCKET c;
c = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP); //int socket( int af, int type, int protocol);
bool l = TRUE; //这个l有什么用呢?
setsockopt(c,SOL_SOCKET,SO_REUSEADDR,(char *)&l,sizeof(l)); //实现端口的重绑定
bind(c,(sockaddr *)&a,sizeof(a)); //c和a绑定
listen(c,100); //监听
while(1)
{
int x;
x = sizeof(b);
SOCKET d=accept(c,(sockaddr *)&b,&x); //d是当接收到连接时用的Socket
//监听的socket只有一个,而处理接收到的Socket可有多个,个数由连接数决定
CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)proc,(LPVOID)d,0,0); //开始处理线程
}
closesocket(c);
return 0;
}
void proc(LPVOID d)
{
SOCKADDR_IN sa; //用于连接web 80端口的Socket结构,
sa.sin_family = AF_INET;
sa.sin_addr.s_addr=inet_addr("127.0.0.1");
sa.sin_port=htons(80);
SOCKET web=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
conne