工具opentelnet源代码

来源:互联网 发布:linux gpu型号 编辑:程序博客网 时间:2024/05/22 17:48
工具opentelnet源代码
作者:  来源于:  发布时间:2006-1-2 23:08:23

////////////////////////////////////////////////////////////////////////////////
//     
//      Telnet Remote Configure And Wake Up
//     
//      File      : OpenTelnet.cpp
//      Version   : 0.5
//      Comment   : only for win2k and XP(pro/server/adv)
//     
//      Create at : 2002.3.8
//      Create by : refdom
//              Email         : [email]refdom@263.net[/email]
//              Home Page : [url]www.opengram.com[/url]
//
//              If you modify the code, or add more functions, please email me a copy.
//     
////////////////////////////////////////////////////////////////////////////////

#include <stdio.h>
#include <assert.h>
#include <windows.h>
#include <Winnetwk.h>
#include <Winreg.h>
#include <Shlwapi.h>

#pragma comment(lib, "Advapi32.lib")
#pragma comment(lib, "Mpr.lib")

SC_HANDLE       g_schSCManager;
HKEY              g_hKey;
DWORD              g_DefaultTelnetStartType;
DWORD              g_DefaultRegistryStartType;
LPBYTE              g_lpDefaultTelnetNTLM;
LPBYTE              g_lpDefaultTelnetPort;

void Usage(char*);
int RestartTelnet();
int StartRemoteRegistry();
int MyStartService(SC_HANDLE, char*);


int main(int argc, char* argv[])
{
       int nRetCode;
       char szIpc[50] = "";
       HKEY hKey;
       LPSTR lpUserName, lpPassword;
       NETRESOURCE NET;

       DWORD dwNTLM, dwTelnetPort;

       Usage(argv[0]);
       if (argc < 5)
              return 0;

       sprintf (szIpc, "%s//ipc$", argv[1]);
       lpUserName = argv[2];
       lpPassword = argv[3];

       NET.lpLocalName = NULL;
       NET.lpRemoteName = szIpc;
       NET.dwType = RESOURCETYPE_ANY;
       NET.lpProvider = NULL;

       printf ("Connecting %s...",argv[1]);

ReConnect:

       nRetCode = WNetCancelConnection2(szIpc, CONNECT_UPDATE_PROFILE, TRUE);
       if (nRetCode == NO_ERROR)
              printf ("Canncel Successfully!/n");

       nRetCode = WNetAddConnection2(&NET, lpPassword, lpUserName, CONNECT_INTERACTIVE);
       if (nRetCode == ERROR_ALREADY_ASSIGNED || nRetCode == ERROR_DEVICE_ALREADY_REMEMBERED)
       {
              printf ("Already conneted to the server!/n");
              printf ("Now re-connecting the server.../n");
              goto ReConnect;
       }
       else if (nRetCode == NO_ERROR)
              printf ("Successfully!/n");
       else
       {
              printf ("/n/tErr:");
              switch (nRetCode)
              {
              case ERROR_ALREADY_ASSIGNED:


              case ERROR_ACCESS_DENIED:
                     printf ("ERROR_ACCESS_DENIED/n");
                     break;
              case ERROR_BAD_NET_NAME:
                     printf ("ERROR_BAD_NET_NAME/n");
                     break;
              default:
                     printf ("CONNECT ERR:%d!/n",GetLastError());
                     break;
              }
              return 0;
       }

       //open SCManager
       g_schSCManager = OpenSCManager(argv[1], NULL, SC_MANAGER_ALL_ACCESS);
       if (g_schSCManager == NULL)
       {
              printf ("Open SCManager failed!/n");
              return 0;
       }

       //check remote registry service is running
       if (!StartRemoteRegistry())
       {
              printf ("All Process Failed!/n");
              return 0;
       }

       //open the registry
       if (!(RegConnectRegistry((LPCTSTR) argv[1], HKEY_LOCAL_MACHINE, &g_hKey) == ERROR_SUCCESS))
       {
              printf ("Connect remote registry failed!/n");
              return 0;
       }

       if (!(RegOpenKeyEx(g_hKey, "SOFTWARE//Microsoft//TelnetServer//1.0", 0, KEY_ALL_ACCESS, &hKey) == ERROR_SUCCESS))
       {
              printf ("Open key failed!/n");
              return 0;
       }

       //read the registry for default config
       g_lpDefaultTelnetNTLM = (LPBYTE) LocalAlloc(LPTR, 50);
       g_lpDefaultTelnetPort = (LPBYTE) LocalAlloc(LPTR, 50);
       DWORD dwDataSize = 50;
       if (!(RegQueryValueEx(hKey, "NTLM", NULL, NULL, g_lpDefaultTelnetNTLM, &dwDataSize) == ERROR_SUCCESS))
       {
              printf ("Read NTLM failed!/n ");
              return 0;
       }
       if (!(RegQueryValueEx(hKey, "TelnetPort", NULL, NULL, g_lpDefaultTelnetPort, &dwDataSize) == ERROR_SUCCESS))
       {
              printf ("Read port failed!/n ");
              return 0;
       }

       //edit the registry
       dwNTLM = atoi(argv[4]);
       if (dwNTLM >= 3)
       {
              dwNTLM = 1;
       }
       dwTelnetPort = atoi(argv[5]);

       if (!(RegSetValueEx(hKey, "NTLM", 0, REG_DWORD, (LPBYTE) &dwNTLM, sizeof(DWORD)) == ERROR_SUCCESS))
       {
              printf ("Set NTLM value failed!");
              return 0;
       }

       RegSetValueEx(hKey, "TelnetPort", 0, REG_DWORD, (LPBYTE) &dwTelnetPort, sizeof(DWORD));

       //restart telnet service
       nRetCode = RestartTelnet();

       if (nRetCode)
       {
              printf ("/nBINGLE!!!Yeah!!/n");
              printf ("Telnet Port is %d. You can try:/"telnet ip %d/", to connect the server!", dwTelnetPort, dwTelnetPort);
       }

       //remain the default setting
       if (!(RegSetValueEx(hKey, "default_NTLM", 0, REG_DWORD, g_lpDefaultTelnetNTLM, sizeof(DWORD)) == ERROR_SUCCESS))
       {
              printf ("Set defaultNTLM value failed!");
              return 0;
       }
       if (!(RegSetValueEx(hKey, "default_Port", 0, REG_DWORD, g_lpDefaultTelnetPort, sizeof(DWORD)) == ERROR_SUCCESS))
       {
              printf ("Set defaultPort value failed!");
              return 0;
       }
       if (!(RegSetValueEx(hKey, "default_TelnetStart", 0, REG_DWORD, (LPBYTE) &g_DefaultTelnetStartType, sizeof(DWORD)) == ERROR_SUCCESS))
       {
              printf ("Set defaulttelnetstart value failed!");
              return 0;
       }
       if (!(RegSetValueEx(hKey, "default_RegistryStart", 0, REG_DWORD, (LPBYTE) &g_DefaultRegistryStartType, sizeof(DWORD)) == ERROR_SUCCESS))
       {
              printf ("Set defaultregistrystart value failed!");
              return 0;
       }

       RegCloseKey(hKey);
       RegCloseKey(g_hKey);
       //close SCManager
       CloseServiceHandle(g_schSCManager);

       //close the session with remote server
       printf ("/nDisconnecting server...");
       nRetCode = WNetCancelConnection2(argv[1], CONNECT_UPDATE_PROFILE, TRUE);
       if (nRetCode == NO_ERROR)
              printf ("Successfully!/n");
       else
              printf ("Failed!/n");

       return 0;
}

void Usage(char* pcAppName)
{
       printf ("*******************************************************/n");
       printf ("Remote Telnet Configure, by refdom/n");
       printf ("Email: [email]refdom@263.net[/email]/n");
       printf ("%s/n/n", pcAppName);
       printf ("Usage:OpenTelnet.exe ////server username password NTLMAuthor telnetport/n");
       printf ("*******************************************************/n");
       return;
}

int RestartTelnet()
{
       DWORD                                   dwWaitTime;
       DWORD                                   dwConfigSize;
       SC_HANDLE                            schTelnetService;
       SERVICE_STATUS                     ssTelnetStatus;
       LPQUERY_SERVICE_CONFIG       lpTelnetConfig;

       printf ("/nNOTICE!!!!!!/n");
       printf ("The Telnet Service default setting:NTLMAuthor=2  TelnetPort=23/n/n");

       //stop the telnet service
       schTelnetService = OpenService(g_schSCManager, "TlntSvr", SERVICE_ALL_ACCESS);
       if (schTelnetService == NULL)
       {
              printf ("Open service failed!/n");
              return 0;
       }

       lpTelnetConfig = (LPQUERY_SERVICE_CONFIG) LocalAlloc(LPTR, 1024);
       if (lpTelnetConfig == NULL)
       {
              printf ("Alloc memory failed!/n");
              return 0;
       }

       if (!QueryServiceConfig(schTelnetService, lpTelnetConfig, 1024, &dwConfigSize))
       {
              printf ("Query service congfig failed!/n");
              return 0;
       }

       //remain the fault start ytpe of telnet service
       g_DefaultTelnetStartType = lpTelnetConfig->dwStartType;

       //change the start type of the telnet service
       if (lpTelnetConfig->dwStartType == SERVICE_DISABLED)
       {
              if (!ChangeServiceConfig(schTelnetService,
                                                        SERVICE_NO_CHANGE,
                                                        SERVICE_DEMAND_START,
                                                        SERVICE_NO_CHANGE,
                                                        NULL, NULL, NULL, NULL, NULL, NULL, NULL))
              {
                     printf ("Change service config failed!/n");
                     return 0;
              }
       }

       if (!(QueryServiceStatus(schTelnetService, &ssTelnetStatus)))
       {
              printf ("Query service status failed!/n");
              return 0;
       }

       if (ssTelnetStatus.dwCurrentState != SERVICE_STOPPED && ssTelnetStatus.dwCurrentState != SERVICE_STOP_PENDING)
       {
              printf ("Stopping telnet service .../n");
              if (!(ControlService(schTelnetService, SERVICE_CONTROL_STOP, &ssTelnetStatus)))
              {
                     printf ("Control telnet service status failed!/n");
                     return 0;
              }

              dwWaitTime = ssTelnetStatus.dwWaitHint / 10;
              if( dwWaitTime < 1000 )
                     dwWaitTime = 1000;
              else if ( dwWaitTime > 10000 )
                     dwWaitTime = 10000;

              Sleep(dwWaitTime);
              if (!QueryServiceStatus(schTelnetService, &ssTelnetStatus))
              {
                     printf ("Query service status failed!/n");
              }

              if ( ssTelnetStatus.dwCurrentState == SERVICE_STOPPED || ssTelnetStatus.dwCurrentState == SERVICE_STOP_PENDING)
              {
                     printf ("Telnet service is stopped successfully!/n");
              }
              else
              {
                     printf ("Stopping telnet service failed!/n");
                     return 0;
              }
       }

       //start the telnet service

       if (!MyStartService(schTelnetService, "telnet"))
              return 0;

       CloseServiceHandle(schTelnetService);
       return 1;
}

int StartRemoteRegistry()
{
       SC_HANDLE schRegistryService;
       SERVICE_STATUS ssRegistryStatus;
       LPQUERY_SERVICE_CONFIG lpRegistryConfig;
       DWORD dwConfigSize;

       lpRegistryConfig = (LPQUERY_SERVICE_CONFIG) LocalAlloc(LPTR, 1024);
       if (lpRegistryConfig == NULL)
       {
              printf ("Alloc memory failed!/n");
              return 0;
       }

       schRegistryService = OpenService( g_schSCManager, "RemoteRegistry", SERVICE_ALL_ACCESS);
       if (schRegistryService == NULL)
       {
              printf ("Open remote registry service failed!/n");
              return 0;
       }

       if (!QueryServiceConfig(schRegistryService, lpRegistryConfig, 1024, &dwConfigSize))
       {
              printf ("Query registry service config failed!/n");
              return 0;
       }

       g_DefaultRegistryStartType = lpRegistryConfig->dwStartType;
       if (g_DefaultRegistryStartType == SERVICE_DISABLED)
       {
              if (!ChangeServiceConfig(schRegistryService,
                                                        SERVICE_NO_CHANGE,
                                                        SERVICE_DEMAND_START,
                                                        SERVICE_NO_CHANGE,
                                                        NULL, NULL, NULL, NULL, NULL, NULL,NULL))
              {
                     printf ("Change registry service config failed!/n");
                     return 0;
              }
       }

       if (!QueryServiceStatus(schRegistryService, &ssRegistryStatus))
       {
              printf ("Query remote registry service failed!/n");
              return 0;
       }

       if (ssRegistryStatus.dwCurrentState != SERVICE_RUNNING)
       {
              if (!MyStartService(schRegistryService, "remote registry"))
                     return 0;
       }
       CloseServiceHandle(schRegistryService);
       return 1;
}

int MyStartService(SC_HANDLE schService, char* szServiceName)
{
       DWORD dwWaitTime;
       DWORD dwOldCheckPoint;
       DWORD dwStartTickCount;
       SERVICE_STATUS ssStatus;

       printf ("Starting %s service.../n", szServiceName);
       if (!(StartService(schService, 0, NULL)))
       {
              printf ("Starting %s service failed!/n", szServiceName);
              return 0;
       }

       if (!(QueryServiceStatus(schService, &ssStatus)))
       {
              printf ("Query %s service status failed!/n",szServiceName);
//              return ;
       }

    dwStartTickCount = GetTickCount();
    dwOldCheckPoint = ssStatus.dwCheckPoint;

       while ( ssStatus.dwCurrentState == SERVICE_START_PENDING)
       {
              dwWaitTime = ssStatus.dwWaitHint / 10;
        if( dwWaitTime < 1000 )
            dwWaitTime = 1000;
        else if ( dwWaitTime > 10000 )
            dwWaitTime = 10000;

              Sleep(dwWaitTime);

        // Check the status again.
 
        if (!QueryServiceStatus(schService, &ssStatus))
            break;
 
        if ( ssStatus.dwCheckPoint > dwOldCheckPoint )
        {
            // The service is making progress.
            dwStartTickCount = GetTickCount();
            dwOldCheckPoint = ssStatus.dwCheckPoint;
        }
        else
        {
            if(GetTickCount()-dwStartTickCount > ssStatus.dwWaitHint)
            {
                // No progress made within the wait hint
                break;
            }
        }
       }

       if ( ssStatus.dwCurrentState == SERVICE_RUNNING )
       {
              printf ("%s service is started successfully! %s service is running!/n", szServiceName, szServiceName);
       }
       else
       {
              printf ("%s service is not started!/n", szServiceName);
              return 0;
       }

       return 1;
}

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

 
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 鱼身上鱼鳞烂了怎么办 鱼身上发白烂了怎么办 养的鱼身上烂了怎么办 婴儿被蚊虫咬了怎么办 在野外被蚂蚁咬怎么办 娱乐之太帅了怎么办 鞋舌头歪没有孔怎么办 万一吃了母猪肉怎么办 我的手机丢了怎么办 欠了赌债还不起怎么办 车库门前被堵了怎么办 别人车停我车位怎么办 怎么办能防止锁眼被堵 别人堵着我车了怎么办 马桶被排骨堵了怎么办 马桶被刷子堵了怎么办 屎太大马桶堵了怎么办 大便硬马桶堵了怎么办 马桶让大便堵了怎么办 出了月子奶水少怎么办 木瓜没熟切开了怎么办 小孩被蚊虫叮咬红肿怎么办 下巴歪导致脸歪怎么办 全民k歌有杂音怎么办 录歌换气声很大怎么办 网易云没有的歌怎么办 qq空间给封了怎么办 酒店住最后一间怎么办 妻子起诉离婚丈夫不离怎么办 老婆对我没感情怎么办 老婆要跟我离婚怎么办 眼睛里进了沙子怎么办 耳塞孔进沙子了怎么办 斜挎包链子长了怎么办 爱上大15岁大叔怎么办 老板不给发工资怎么办 4个月婴儿感冒了怎么办 9个月宝宝感冒了怎么办 婆婆去世了我该怎么办 腰疼得睡不着觉怎么办 长期抱孩子腰疼怎么办