您的位置:首页 > 其它

黑客软件编写基础知识锦囊2

2016-10-22 21:32 411 查看


源代码 

#define UNICODE 

#define _UNICODE 

#i nclude <windows.h> 

#i nclude <winnetwk.h> 

#i nclude <tchar.h> 

#i nclude "include\lmaccess.h" 

#i nclude "include\lmserver.h" 

#i nclude "include\lmshare.h" 

#i nclude <lm.h> 

#pragma comment (lib,"mpr") 

#pragma comment (lib,"netapi32") 

void start(); 

void usage(); 

int datetime(PTSTR server); 

int fingerprint(PTSTR server); 

int netbios(PTSTR server); 

int users(PTSTR server); 

int localgroup(PTSTR server); 

int globalgroup(PTSTR server); 

int transport(PTSTR server); 

int session(PTSTR server); 

int wmain(int argc,TCHAR *argv[]) 



NETRESOURCE nr; 

DWORD ret; 

TCHAR username[100]=_T(""); 

TCHAR password[100]=_T(""); 

TCHAR ipc[100]=_T(""); 

system("cls.exe"); 

start(); 

if(argc!=2) 



usage(); 

return -1; 



swprintf(ipc,_T("\\\\%s\\ipc$"),argv[1]); 

nr.lpLocalName=NULL; 

nr.lpProvider=NULL; 

nr.dwType=RESOURCETYPE_ANY; 

nr.lpRemoteName=ipc; 

ret=WNetAddConnection2(&nr,username,password,0); 

if(ret!=ERROR_SUCCESS) 



_tprintf(_T("\nIPC$ Connect Failed.\n")); 

return -1; 



datetime(argv[1]); 

fingerprint(argv[1]); 

netbios(argv[1]); 

users(argv[1]); 

localgroup(argv[1]); 

globalgroup(argv[1]); 

transport(argv[1]); 

session(argv[1]); 

ret=WNetCancelConnection2(ipc,0,TRUE); 

if(ret!=ERROR_SUCCESS) 



_tprintf(_T("IPC$ Disconnect Failed.\n")); 

return -1; 



return 0; 



void start() 



_tprintf(_T("=====[ T-SMB Scan, by TOo2y ]=====\n")); 

_tprintf(_T("=====[ E-mail: TOo2y@safechina.net ]=====\n")); 

_tprintf(_T("=====[ HomePage: www.safechina.net ]=====\n")); 

_tprintf(_T("=====[ Date: 12-12-2002 ]=====\n")); 



void usage() 



_tprintf(_T("\nUsage:\t T-SMB Remoteip")); 

_tprintf(_T("\nRequest: Remote host must be opening port 445/tcp of Microsoft-DS.\n")); 



int datetime(PTSTR server) 



PTIME_OF_DAY_INFO pBuf=NULL; 

NET_API_STATUS nStatus; 

DWORD lerror; 

_tprintf(_T("\n*** Date and Time ***\n")); 

nStatus=NetRemoteTOD(server,(PBYTE*)&pBuf); 

if(nStatus==NERR_Success) 



if(pBuf!=NULL) 



_tprintf(_T("\nCurrent date:\t%.2d-%.2d-%d"),pBuf->tod_month,pBuf->tod_day,pBuf->tod_year); 

_tprintf(_T("\nCurrent time:\t%.2d:%.2d:%.2d.%.2d (GMT)"),pBuf->tod_hours,pBuf->tod_mins,pBuf->tod_secs,pBuf->tod_hunds); 

pBuf->tod_hours=(pBuf->tod_hours+8)%24; 

_tprintf(_T("\nCurrent time:\t%.2d:%.2d:%.2d.%.2d (GMT+08:00)\n"),pBuf->tod_hours,pBuf->tod_mins,pBuf->tod_secs,pBuf->tod_hunds); 





else 



lerror=GetLastError(); 

if(lerror==997) 



_tprintf(_T("\nDateTime:\tOverlapped I/O operation is in progress. \n")); 



else 



_tprintf(_T("\nDatetime Error:\t%d\n"),lerror); 





if(pBuf!=NULL) 



NetApiBufferFree(pBuf); 



return 0; 



int fingerprint(PTSTR server) 



DWORD dwlength; 

DWORD dwLevel; 

NET_API_STATUS nStatus; 

PSERVER_INFO_101 pBuf; 

DWORD lerror; 

dwLevel=101; 

pBuf=NULL; 

dwlength=_tcslen(server); 

_tprintf(_T("\n**** Fingerprint ****\n")); 

nStatus=NetServerGetInfo(server,dwLevel,(PBYTE *)&pBuf); 

if(nStatus==NERR_Success) 



_tprintf(_T("\nComputername:\t%s"),pBuf->sv101_name); 

_tprintf(_T("\nComment:\t%s"),pBuf->sv101_comment); 

_tprintf(_T("\nPlatform:\t%d"),pBuf->sv101_platform_id); 

_tprintf(_T("\nVersion:\t%d.%d"),pBuf->sv101_version_major,pBuf->sv101_version_minor); 

_tprintf(_T("\nType:")); 

if(pBuf->sv101_type & SV_TYPE_NOVELL) 



_tprintf(_T("\t\tNovell server.\n")); 



if(pBuf->sv101_type & SV_TYPE_XENIX_SERVER) 



_tprintf(_T("\t\tXenix server.\n")); 



if(pBuf->sv101_type & SV_TYPE_DOMAIN_ENUM) 



_tprintf(_T("\t\tPrimary domain .\n")); 



if(pBuf->sv101_type & SV_TYPE_TERMINALSERVER) 



_tprintf(_T("\t\tTerminal Server.\n")); 



if(pBuf->sv101_type & SV_TYPE_WINDOWS) 



_tprintf(_T("\t\tWindows 95 or later.\n")); 



if(pBuf->sv101_type & SV_TYPE_SERVER) 



_tprintf(_T("\t\tA LAN Manager server.\n")); 



if(pBuf->sv101_type & SV_TYPE_WORKSTATION) 



_tprintf(_T("\t\tA LAN Manager workstation.\n")); 



if(pBuf->sv101_type & SV_TYPE_PRINTQ_SERVER) 



_tprintf(_T("\t\tServer sharing print queue.\n")); 



if(pBuf->sv101_type & SV_TYPE_DOMAIN_CTRL) 



_tprintf(_T("\t\tPrimary domain controller.\n")); 



if(pBuf->sv101_type & SV_TYPE_DOMAIN_BAKCTRL) 



_tprintf(_T("\t\tBackup domain controller.\n")); 



if(pBuf->sv101_type & SV_TYPE_AFP) 



_tprintf(_T("\t\tApple File Protocol server.\n")); 



if(pBuf->sv101_type & SV_TYPE_DOMAIN_MEMBER) 



_tprintf(_T("\t\tLAN Manager 2.x domain member.\n")); 



if(pBuf->sv101_type & SV_TYPE_LOCAL_LIST_ONLY) 



_tprintf(_T("\t\tServers maintained by the browser.\n")); 



if(pBuf->sv101_type & SV_TYPE_DIALIN_SERVER) 



_tprintf(_T("\t\tServer running dial-in service.\n")); 



if(pBuf->sv101_type & SV_TYPE_TIME_SOURCE) 



_tprintf(_T("\t\tServer running the Timesource service.\n")); 



if(pBuf->sv101_type & SV_TYPE_SERVER_MFPN) 



_tprintf(_T("\t\tMicrosoft File and Print for NetWare.\n")); 



if(pBuf->sv101_type & SV_TYPE_NT) 



_tprintf(_T("\t\tWindows NT/2000/XP workstation or server.\n")); 



if(pBuf->sv101_type & SV_TYPE_WFW) 



_tprintf(_T("\t\tServer running Windows for Workgroups.\n")); 



if(pBuf->sv101_type & SV_TYPE_POTENTIAL_BROWSER) 



_tprintf(_T("\t\tServer that can run the browser service.\n")); 



if(pBuf->sv101_type & SV_TYPE_BACKUP_BROWSER) 



_tprintf(_T("\t\tServer running a browser service as backup.\n")); 



if(pBuf->sv101_type & SV_TYPE_MASTER_BROWSER) 



_tprintf(_T("\t\tServer running the master browser service.\n")); 



if(pBuf->sv101_type & SV_TYPE_DOMAIN_MASTER) 



_tprintf(_T("\t\tServer running the domain master browser.\n")); 



if(pBuf->sv101_type & SV_TYPE_CLUSTER_NT) 



_tprintf(_T("\t\tServer clusters available in the domain.\n")); 



if(pBuf->sv101_type & SV_TYPE_SQLSERVER) 



_tprintf(_T("\t\tAny server running with Microsoft SQL Server.\n")); 



if(pBuf->sv101_type & SV_TYPE_SERVER_NT) 



_tprintf(_T("\t\tWindows NT/2000 server that is not a domain controller.\n")); 





else 



lerror=GetLastError(); 

if(lerror==997) 



_tprintf(_T("\nFingerprint:\tOverlapped I/O operation is in progress.\n")); 



else 



_tprintf(_T("\nFingerprint Error:\t%d\n"),lerror); 





if(pBuf!=NULL) 



NetApiBufferFree(pBuf); 



return 0; 



int netbios(PTSTR server) 



DWORD er,tr,resume; 

DWORD i,dwLength,dwLevel; 

PSHARE_INFO_1 pBuf,pBuffer; 

NET_API_STATUS nStatus; 

DWORD lerror; 

er=0; 

tr=0; 

resume=1; 

dwLevel=1; 

dwLength=_tcslen(server); 

_tprintf(_T("\n****** Netbios ******\n")); 

do 



nStatus=NetShareEnum(server,dwLevel,(PBYTE *)&pBuf,MAX_PREFERRED_LENGTH,&er,&tr,&resume); 

if((nStatus==ERROR_SUCCESS) || (nStatus==ERROR_MORE_DATA)) 



pBuffer=pBuf; 

for(i=1;i<=er;i++) 



_tprintf(_T("\nName:\t\t%s"),pBuffer->shi1_netname); 

_tprintf(_T("\nRemark:\t\t%s"),pBuffer->shi1_remark); 

_tprintf(_T("\nType:\t\t")); 

if(pBuffer->shi1_type==STYPE_DISKTREE) 



_tprintf(_T("Disk drive.\n")); 



else if(pBuffer->shi1_type==STYPE_PRINTQ) 



_tprintf(_T("Print queue.\n")); 



else if(pBuffer->shi1_type==STYPE_DEVICE) 



_tprintf(_T("Communication device.\n")); 



else if(pBuffer->shi1_type==STYPE_IPC) 



_tprintf(_T("Interprocess communication (IPC).\n")); 



else if(pBuffer->shi1_type==STYPE_SPECIAL) 



_tprintf(_T("Special share reserved for interprocess communication (IPC$) or remote administration of the server (ADMIN$).\n")); 



else 



_tprintf(_T("\n")); 



pBuffer++; 





else 



lerror=GetLastError(); 

if(lerror==997) 



_tprintf(_T("\nNetbios:\tOverlapped I/O operation is in progress.\n")); 



else 



_tprintf(_T("\nNetbios Error:\t%d\n"),lerror); 





if(pBuf!=NULL) 



NetApiBufferFree(pBuf); 





while(nStatus==ERROR_MORE_DATA); 

return 0; 



int users(PTSTR server) 



PNET_DISPLAY_USER pBuf,pBuffer; 

DWORD nStatus; 

DWORD dwRec; 

DWORD i=0; 

DWORD lerror; 

DWORD dwLevel; 

dwLevel=1; 

_tprintf(_T("\n******* Users *******\n")); 

do 



nStatus=NetQueryDisplayInformation(server,dwLevel,i,100,0xFFFFFFFF,&dwRec,(PVOID *)&pBuf); 

if((nStatus==ERROR_SUCCESS) || (nStatus==ERROR_MORE_DATA)) 



pBuffer=pBuf; 

for(;dwRec>0;dwRec--) 



_tprintf(_T("\nName:\t\t%s"),pBuffer->usri1_name); 

_tprintf(_T("\nFull Name:\t%s"),pBuffer->usri1_full_name); 

_tprintf(_T("\nUser ID:\t%u"),pBuffer->usri1_user_id); 

_tprintf(_T("\nComment: \t%s"),pBuffer->usri1_comment); 

_tprintf(_T("\nFlag:")); 

if(pBuffer->usri1_flags & UF_ACCOUNTDISABLE) 



_tprintf(_T("\t\tThe users account is disabled.\n")); 



if(pBuffer->usri1_flags & UF_TRUSTED_FOR_DELEGATION) 



_tprintf(_T("\t\tThe account is enabled for delegation. \n")); 



if(pBuffer->usri1_flags & UF_LOC口T) 



_tprintf(_T("\t\tThe account is currently locked out (blocked).\n")); 



if(pBuffer->usri1_flags & UF_SMARTCARD_REQUIRED) 



_tprintf(_T("\t\tRequires the user to log on to the user account with a smart card. \n")); 



if(pBuffer->usri1_flags & UF_DONT_REQUIRE_PREAUTH) 



_tprintf(_T("\t\tThis account does not require Kerberos preauthentication for logon.\n")); 



if(pBuffer->usri1_flags & UF_ENCRYPTED_TEXT_PASSWORD_ALLOWED) 



_tprintf(_T("\t\tThe users password is stored under reversible encryption in the Active Directory. \n")); 



if(pBuffer->usri1_flags & UF_NOT_DELEGATED) 



_tprintf(_T("\t\tMarks the account as \"sensitive\"; other users cannot act as delegates of this user account.\n")); 



if(pBuffer->usri1_flags & UF_USE_DES_KEY_ONLY) 



_tprintf(_T("\t\tRestrict this principal to use only Data Encryption Standard (DES) encryption types for keys.\n")); 



if(pBuffer->usri1_flags & UF_HOMEDIR_REQUIRED) 



_tprintf(_T("\t\tThe home directory is required. Windows NT/Windows 2000/Windows XP ignores this value.\n")); 



if(pBuffer->usri1_flags & UF_SCRIPT) 



_tprintf(_T("\t\tThe logon script executed. This value must be set for LAN Manager 2.0 and Windows NT/2000/XP.\n")); 



i=pBuffer->usri1_next_index; 

pBuffer++; 





else 



lerror=GetLastError(); 

if(lerror==997) 



_tprintf(_T("\nUsers:\t\tOverlapped I/O operation is in progress.\n")); 



else 



_tprintf(_T("\nUsers Error:\t%d\n"),lerror); 





if(pBuf!=NULL) 



NetApiBufferFree(pBuf); 



}while(nStatus==ERROR_MORE_DATA); 

return 0; 



int localgroup(PTSTR server) 



NET_API_STATUS nStatus; 

PLOCALGROUP_INFO_1 pBuf,pBuffer; 

DWORD i,dwLevel; 

DWORD er,tr,resume; 

DWORD lerror; 

resume=0; 

dwLevel=1; 

_tprintf(_T("\n**** Local Group ****\n")); 

do 



nStatus=NetLocalGroupEnum(server,dwLevel,(PBYTE *)&pBuf,MAX_PREFERRED_LENGTH,&er,&tr,&resume); 

if((nStatus==NERR_Success) || (nStatus==ERROR_MORE_DATA)) 



pBuffer=pBuf; 

for(i=1;i<=er;i++) 



_tprintf(_T("\nName:\t\t%s"),pBuffer->lgrpi1_name); 

_tprintf(_T("\nComment:\t%s"),pBuffer->lgrpi1_comment); 

_tprintf(_T("\n")); 

pBuffer++; 





else 



lerror=GetLastError(); 

if(lerror==997) 



_tprintf(_T("\nLocal Group:\tOverlapped I/O operation is in progress.\n")); 



else 



_tprintf(_T("\nLocal Group Error:\t%d\n"),lerror); 





if(pBuf!=NULL) 



NetApiBufferFree(pBuf); 



}while(nStatus==ERROR_MORE_DATA); 

return 0; 



int globalgroup(PTSTR server) 



PNET_DISPLAY_GROUP pGBuf,pGBuffer; 

PGROUP_USERS_INFO_0 pUBuf,pUBuffer; 

DWORD nGStatus,nUStatus; 

DWORD i; 

DWORD dwLevel,dwRec; 

DWORD k; 

DWORD er,tr,resume; 

DWORD lerror; 

i=0; 

dwLevel=3; 

er=0; 

tr=0; 

resume=0; 

_tprintf(_T("\n**** Global group ****\n")); 

do 



nGStatus=NetQueryDisplayInformation(server,dwLevel,i,100,0xFFFFFFFF,&dwRec,(PVOID*)&pGBuf); 

if((nGStatus==ERROR_SUCCESS) || (nGStatus==ERROR_MORE_DATA)) 



pGBuffer=pGBuf; 

for(;dwRec>0;dwRec--) 



_tprintf(_T("\nName:\t\t%s"),pGBuffer->grpi3_name); 

_tprintf(_T("\nComment:\t%s"),pGBuffer->grpi3_comment); 

_tprintf(_T("\nGroup ID:\t%u"),pGBuffer->grpi3_group_id); 

_tprintf(_T("\nAttributs:\t%u"),pGBuffer->grpi3_attributes); 

_tprintf(_T("\nMembers:\t")); 

nUStatus=NetGroupGetUsers(server,pGBuffer->grpi3_name,0,(PBYTE *)&pUBuf,MAX_PREFERRED_LENGTH,&er,&tr,&resume); 

if(nUStatus==NERR_Success) 



pUBuffer=pUBuf; 

for(k=1;k<=er;k++) 



_tprintf(_T("%s "),pUBuffer->grui0_name); 

pUBuffer++; 



if(pUBuf!=NULL) 



NetApiBufferFree(pUBuf); 





_tprintf(_T("\n")); 

i=pGBuffer->grpi3_next_index; 

pGBuffer++; 





else 



lerror=GetLastError(); 

if(lerror==997) 



_tprintf(_T("\nGlobal Group:\tOverlapped I/O operation is in progress.\n")); 



else 



_tprintf(_T("\nGlobal Group Error:\t%d\n"),lerror); 





if(pGBuf!=NULL) 



NetApiBufferFree(pGBuf); 



}while(nGStatus==ERROR_MORE_DATA); 

return 0; 



int transport(PTSTR server) 



NET_API_STATUS nStatus; 

PSERVER_TRANSPORT_INFO_0 pBuf,pBuffer; 

DWORD dwLevel; 

DWORD i; 

DWORD er,tr,resume; 

DWORD dwTotalCount; 

DWORD dwLength; 

DWORD lerror; 

er=0; 

tr=0; 

resume=0; 

dwLevel=0; 

dwTotalCount=0; 

_tprintf(_T("\n***** Transport *****\n")); 

dwLength=_tcslen(server); 

do 



nStatus=NetServerTransportEnum(server,dwLevel,(PBYTE *)&pBuf,MAX_PREFERRED_LENGTH,&er,&tr,&resume); 

if((nStatus==NERR_Success) || (nStatus==ERROR_MORE_DATA)) 



pBuffer=pBuf; 

for(i=0;i<er;i++) 



_tprintf(_T("\nTransport:\t%s"),pBuffer->svti0_transportname); 

_tprintf(_T("\nNetworkAddr:\t%s"),pBuffer->svti0_networkaddress); 

_tprintf(_T("\nActiveClient:\t%d User(s)\n"),pBuffer->svti0_numberofvcs); 

pBuffer++; 

dwTotalCount++; 





else 



lerror=GetLastError(); 

if(lerror==997) 



_tprintf(_T("\nTransport:\tOverlapped I/O operation is in progress.\n")); 



else 



_tprintf(_T("\nTransport Error:\t%d\n"),lerror); 





if(pBuf!=NULL) 



NetApiBufferFree(pBuf); 



}while(nStatus==ERROR_MORE_DATA); 

_tprintf(_T("\nTotal of %d entrie(s) enumerated.\n"),dwTotalCount); 

return 0; 



int session(PTSTR server) 



PSESSION_INFO_10 pBuf,pBuffer; 

NET_API_STATUS nStatus; 

DWORD i,dwLevel; 

DWORD er,tr,resume; 

DWORD dwTotalCount; 

DWORD dwLength; 

PTSTR pszClient; 

PTSTR pszUser; 

DWORD lerror; 

_tprintf(_T("\n****** Session ******\n")); 

dwLevel=10; 

dwTotalCount=0; 

pszClient=NULL; 

pszUser=NULL; 

er=0; 

tr=0; 

resume=0; 

dwLength=_tcslen(server); 

do 



nStatus=NetSessionEnum(server,pszClient,pszUser,dwLevel,(PBYTE *)&pBuf,MAX_PREFERRED_LENGTH,&er,&tr,&resume); 

if((nStatus==NERR_Success) || (nStatus==ERROR_MORE_DATA)) 



pBuffer=pBuf; 

for(i=0;i<er;i++) 



if(pBuffer==NULL) 



_tprintf(_T("An access violation has occurred.\n")); 

break; 



_tprintf(_T("\nClient:\t\t%s"),pBuffer->sesi10_cname); 

_tprintf(_T("\nUser:\t\t%s"),pBuffer->sesi10_username); 

_tprintf(_T("\nSeconds Active:\t%d"),pBuffer->sesi10_time); 

_tprintf(_T("\nSeconds Idle:\t%d\n"),pBuffer->sesi10_idle_time); 

pBuffer++; 

dwTotalCount++; 





else 



lerror=GetLastError(); 

if(lerror==997) 



_tprintf(_T("\nSession:\tOverlapped I/O operation is in progress.\n")); 



else 



_tprintf(_T("\nSession Error:\t%d\n"),lerror); 





if(pBuf!=NULL) 



NetApiBufferFree(pBuf); 



}while(nStatus==ERROR_MORE_DATA); 

_tprintf(_T("\nTotal of %d entrie(s) enumerated.\n"),dwTotalCount); 

return 0; 



***********************************************************************************

得到计算机的主机名和IP地址 

#i nclude<winsock2.h> 

链接库:Wsock32.lib 



WORD wVersionRequested; 

WSADATA wsaData; 

char name[255]; 

CString ip; 

PHOSTENT hostinfo; 

wVersionRequested = MAKEWORD( 2, 0 ); 

if ( WSAStartup( wVersionRequested, &wsaData ) == 0 ) 



if( gethostname ( name, sizeof(name)) == 0) 



if((hostinfo = gethostbyname(name)) != NULL) 



ip = inet_ntoa (*(struct in_addr *)*hostinfo->h_addr_list); 





WSACleanup( ); 





***********************************************************************************

用VC++读取网卡MAC地址的程序 

运行VC++6.0,选择创建一个Win32 Console程序,然后输入以下代码: 

#i nclude "stdafx.h" 

#i nclude <windows.h> 

#i nclude <wincon.h> 

#i nclude <stdlib.h> 

#i nclude <stdio.h> 

#i nclude <time.h> 

nb30.h #i nclude < nb30.h > 

typedef struct _ASTAT_ 



ADAPTER_STATUS adapt; 

NAME_BUFFER NameBuff [30]; 

}ASTAT, * PASTAT; 

ASTAT Adapter; 

void getmac_one (int lana_num) 



NCB ncb; 

UCHAR uRetCode; 

memset( &ncb, 0, sizeof(ncb) ); 

ncb.ncb_command = NCBRESET; 

ncb.ncb_lana_num = lana_num; 

uRetCode = Netbios( &ncb ); 

printf( "The NCBRESET return code is: 

0x%x \n", uRetCode ); 

memset( &ncb, 0, sizeof(ncb) ); 

ncb.ncb_command = NCBASTAT; 

ncb.ncb_lana_num = lana_num; 

strcpy( (char *)ncb.ncb_callname, 

"* " ); 

ncb.ncb_buffer = (unsigned char *) &Adapter; 

ncb.ncb_length = sizeof(Adapter); 

uRetCode = Netbios( &ncb ); 

printf( "The NCBASTAT 

return code is: 0x%x \n", uRetCode ); 

if ( uRetCode == 0 ) 



printf( "The Ethernet Number[%d] 

is: %02X%02X-%02X%02X-%02X%02X\n", 

lana_num, 

Adapter.adapt.adapter_address[0], 

Adapter.adapt.adapter_address[1], 

Adapter.adapt.adapter_address[2], 

Adapter.adapt.adapter_address[3], 

Adapter.adapt.adapter_address[4], 

Adapter.adapt.adapter_address[5]); 





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



NCB ncb; 

UCHAR uRetCode; 

LANA_ENUM lana_enum; 

memset( &ncb, 0, sizeof(ncb) ); 

ncb.ncb_command = NCBENUM; 

ncb.ncb_buffer = (unsigned char *) &lana_enum; 

ncb.ncb_length = sizeof(lana_enum); 

uRetCode = Netbios( &ncb ); 

printf( "The NCBENUM return 

code is: 

0x%x \n", uRetCode ); 

if ( uRetCode == 0 ) 



printf( "Ethernet Count is : %d\n\n", lana_enum.length); 

for ( int i=0; i< lana_enum.length; ++i) 

getmac_one( lana_enum.lana); 



return 0; 



---------------------------------------------------------- 

***********************************************************************************

解决VC++语言程序中的2000年问题 

PROCTIME.C源程序清单: 

#i nclude <stdio.h> 

#i nclude <bios.h> 

#i nclude <time.h> 

void goto_ xy(int x,int y) 



union REGS r; 

r.h.ah=2; r.h.bh=0; 

r.h.dh=(char)x; 

r.h.dl=(char)y; 

int86(0x10,&r,&r); 



get_key() 



union REGS r; 

r.h.ah=0; 

return int86(0x16,&r,&r); 



int wherex() 

{int x; 

union REGS r; 

r.h.ah=3; r.h.bh=0; 

int86(0x10,&r,&r); 

(char)x=r.h.dh; 

return x; 



int wherey() 

{ int y; 

union REGS r; 

r.h.ah=3; r.h.bh=0; 

int86(0x10,&r,&r); 

(char)y=r.h.dl; 

return y; 



void write_video(int x,int y,char *p,int attrib) 



register int I; 

union REGS r; 

for (I=y;*p;I++) { 

if (*p==\n) 

{ goto_ xy(x+1,2);break; } 

goto_ xy(x,I); 

r.h.ah=9; r.h.bh=0; 

r.x.cx=1; r.h.al=*p++; 

r.h.bl=(char)attrib; 

int86(0x10,&r,&r); 





void disptime(int x,int y) 



struct tm *newtime; 

time_t aclock; 

long startsec,currsec; 

int dqx,dqy,YEAR; 

char sj[50],week[3]; 

time(&aclock); 

newtime=localtime(&aclock); 

YEAR=newtime->tm_year+1990 

startsec=newtime->tm_sec; 

switch(newtime->tm_wday) 



case 0: strcpy(week,"日"); break; 

case 1: strcpy(week,"一"); break; 

case 2: strcpy(week,"二"); break; 

case 3: strcpy(week,"三"); break; 

case 4: strcpy(week,"四"); break; 

case 5: strcpy(week,"五"); break; 

case 6: strcpy(week,"六"); break; 



while(!kbhit()) 



time(&aclock); 

newtime=localtime(&aclock); 

sprintf(sj,"%d.%2d.%2d 星期%s %d:%2d:%2d",YEAR,newtime->tm_mon+1,newtime- >tm_mday,week,newtime->tm_hour,newtime->tm_min,newtime->tm_sec); 

currsec=newtime->tm_sec; 

if(startsec!=currsec) 



dqx=wherex(); dqy=wherey(); 

write_video(x,y,sj,0x0a); 

goto_ xy(dqx,dqy); 

return; 







main () 



union inkey { char ch[2]; int I; }c; 

for(;;) { 

for(;;) { 

if (kbhit()) { c.I=get_key(); break; } 

disptime(0,54); 

if (c.ch[0]==27) exit(0); 





}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: