分享
 
 
 

控制远程计算机拨号上网并获取其IP地址

王朝厨房·作者佚名  2007-01-04
窄屏简体版  字體: |||超大  

福建师范大学社会学系 许春漫

---- 本 文 提 出 采 用Win98 拨 号 网 络 服 务 器、FTP 协 议 和 免 费 个 人 主 页 空 间 站 点 实 现 控 制 远 程 计 算 机 拨 号 上 网 并 获 取 其IP 地 址 的 方 法, 该 方 法 在 实 施 远 程 维 护 等 方 面 具 有 较 高 的 实 用 价 值。

一、 问 题 的 提 出

----许 多 计 算 机 系 统 需 要7 ×24 小 时 稳 定 可 靠 运 行, 当 出 现 突 发 事 件 时, 要 求 能 对 系 统 实 施 远 程 系 统 维 护 以 便 排 除 故 障, 此 时 就 需 要 本 地 计 算 机 和 远 程 系 统 建 立 通 信 连 接, 通 过 相 应 的 工 具 软 件 实 施 远 程 维 护。 在 建 立 远 程 通 信 连 接 时, 通 常 采 用Modem 拨 号 方 法 将 远 端Modem 置 为 自 动 应 答 方 式, 由 本 地Modem 通 过 公 用 电 话 网 发 起 呼 叫 来 建 立 通 信 连 接。 当 主、 被 叫Modem 所 在 地 之 间 的 长 途 费 率 较 高 时, 经 常 的 远 程 维 护 将 带 来 较 高 的 长 途 话 费 开 支。 本 文 提 出 通 过Internet 建 立 两 台 计 算 机 之 间 通 信 的 方 法。

二、 通 知 远 程 计 算 机 拨 号 上 网

----远 程 计 算 机 安 装Win98 操 作 系 统, 在 安 装 了 拨 号 网 络 服 务 器 组 件 后, 便 可 配 置 为 一 台 拨 号 网 络 服 务 器, 供 本 地 计 算 机 通 过 电 话 网 拨 号 建 立 通 信 连 接, 并 访 问 远 程 计 算 机 上 的 共 享 资 源。 在 拨 号 通 信 链 路 上 可 绑 定TCP/IP 等 通 信 协 议,Win98 拨 号 服 务 器 给 每 个 拨 入 计 算 机 分 配 一 个 独 立 的IP 地 址, 同 时 也 给 自 身 分 配 一 个IP 地 址, 这 些IP 地 址 具 有 相 同 的 网 络 编 号, 同 属 于 一 个 通 信 子 网, 服 务 器 的 主 机 编 号 为1, 拨 入 计 算 机 的 主 机 编 号 依 次 从2 开 始 编 起。 另 外,Win98 拨 号 服 务 器 还 提 供 了 密 码 保 护 功 能, 拨 入 计 算 机 只 有 在 提 供 正 确 的 密 码 情 况 下, 才 能 成 功 建 立 起 拨 号 连 接。

----当 本 地 计 算 机 要 通 知 远 程 计 算 机 拨 号 登 录Internet 时, 首 先 通 过 电 话 拨 号 和 远 程 计 算 机 建 立 拨 号 连 接, 获 取 远 程 计 算 机 分 配 给 本 机 的IP 地 址, 并 经 处 理 得 到 远 程 计 算 机 的IP 地 址, 然 后, 和 远 程 计 算 机 建 立TCP/IP 连 接, 并 送 出 命 令 通 知 远 程 计 算 机 准 备 断 开 拨 号 连 接, 登 录Internet, 当 本 地 计 算 机 收 到 远 程 计 算 机 确 认 信 息 后, 便 可 中 断 和 远 程 计 算 机 的 拨 号 连 接, 也 准 备 登 录Internet。

三、 获 取 远 程 计 算 机Internet IP 地 址

----在 取 得 远 程 计 算 机Internet IP 地 址 前, 本 地 计 算 机 是 无 法 通 过Internet 和 远 程 计 算 机 进 行 实 时 通 信 的。 远 程 计 算 机 登 录Internet, 获 取 动 态IP 地 址 后, 可 通 过 发 电 子 邮 件 方 式 将 动 态IP 地 址 通 知 本 地 计 算 机, 也 可 通 过 将 动 态IP 地 址 保 存 在 远 程、 本 地 计 算 机 都 可 访 问 到 的FTP 服 务 器 文 件 中, 供 本 地 计 算 机 读 取。 本 文 采 用 后 一 种 方 法, 若 没 有 合 适 的FTP 服 务 器, 可 到 提 供 免 费 主 页 空 间 允 许 以FTP 方 式 维 护 的Web 站 点 上 申 请 一 块 空 间, 供 远 程、 本 地 计 算 机 共 同 访 问。

----本 地 计 算 机 登 录Internet 后, 用FTP 协 议 读 取 指 定FTP 服 务 器 上 含 有 远 程 计 算 机 动 态IP 地 址 的 文 本 文 件, 从 而 取 得 远 程 计 算 机 的Internet IP 地 址, 然 后, 本 地 计 算 机 便 可 通 过 Internet 和 远 程 计 算 机 启 动 任 何 基 于TCP/IP 连 接 的 通 信 应 用 程 序, 如 利 用Pcanywhere 控 制 远 程 计 算 机, 并 可 通 过 远 程 计 算 机 访 问 与 远 程 计 算 机 相 连 的 整 个 网 络 资 源, 达 到 对 远 程 计 算 机 系 统 进 行 维 护 的 目 的。

四、 通 知 远 程 计 算 机 断 开Internet 连 接

---- 当 本 地 计 算 机 和 远 程 计 算 机 通 信 结 束 后, 便 可 通 知 远 程 计 算 机 断 开Internet 连 接。 利 用 远 程 计 算 机 的 Internet IP 地 址, 本 地 计 算 机 和 远 程 计 算 机 建 立TCP/IP 连 接, 送 出 断 开Internet 指 令, 远 程 计 算 机 收 到 指 令 后, 回 送 确 认 消 息, 断 开 Internet 连 接, 等 待 下 一 个 命 令 的 到 来。

五、 程 序 实 现

----本 地、 远 程 计 算 机 运 行 的 是 同 一 道 程 序, 通 过 不 同 的 命 令 按 钮 来 激 活 本 地、 远 程 计 算 机 程 序 所 具 有 的 不 同 功 能。 程 序 采 用VC + +6.0 编 写, 在Win98 环 境 下 调 试 运 行 通 过。 限 于 篇 幅, 下 面 只 给 出 程 序 的 主 要 部 分 及 注 释 说 明, 并 省 去 了 一 些 出 错 处 理 环 节。

// 宏 定 义

#define MAX_PENDING_CONNECTS 2

#define NO_FLAGS_SET 0

#define MY_MSG_LENGTH 100

// 全 局 变 量

HRASCONN hCon; //RAS 连 接 句 柄

HWND hWin;

HINSTANCE hInst;

DWORD ThreadId=0;

HANDLE hThread=NULL;

char cRemoteIP[50]; //remote IP 地 址

SOCKET serv_sock,rsock; // 服 务 端

// 建 立 拨 号 连 接 函 数,

成 功 返 回 TRUE else FALSE

// szEntry 拨 号 连 接 名 szPhone

电 话 号 码 szUser 和szPassword

分 别 为internet 的 用 户 名 和 口 令

BOOL StartCon( HWND hWnd,char * szEntry,char

* szUser,char * szPassword,char * szPhone )

{

RASDIALPARAMS rdParams;

DWORD dwRet;

char szBuf[300];

rdParams.dwSize = sizeof(RASDIALPARAMS);

lstrcpy(rdParams.szEntryName,szEntry);

strcpy(rdParams.szPhoneNumber,szPhone);

rdParams.szCallbackNumber[0] = ‘\0’;

strcpy(rdParams.szUserName,szUser);

strcpy(rdParams.szPassword,szPassword);

rdParams.szDomain[0] = ‘\0’;

// 以 下 开 始 同 步 拨 叫 网 络

dwRet = RasDial( NULL, NULL,

&rdParams, 0L, NULL, &hCon );

return TRUE;

}

// 通 过FTP 协 议 读 写FTP 服 务 器 上

文 件 的 函 数 cFlag =0 写 =1 读, 读 写

成 功 时 返 回 所 读 写 的 字 节 数

DWORD FtpWriteRead(char * cFtpHost,char *

cFile,DWORD dwLen,char * buf,char cFlag)

{

HINTERNET hInternet,hHost,hFile;

DWORD dwLength,dwError;

hInternet=InternetOpen(“FZYXB",LOCAL

_INTERNET_ACCESS,

NULL,0,0);

hHost=InternetConnect(hInternet,cFtpHost,

INTERNET_INVALID_PORT_NUMBER,

“fzxucm",“abc505",

INTERNET_SERVICE_FTP,INTERNET

_FLAG_PASSIVE,0);

if ( cFlag == 0 ) // 写

hFile=FtpOpenFile(hHost,cFile,GENERIC_WRITE,

FTP_TRANSFER_TYPE_BINARY,0);

else

hFile=FtpOpenFile(hHost,cFile,GENERIC_READ,

FTP_TRANSFER_TYPE_BINARY,0);

if( !hFile)

{

if ( (dwError=GetLastError()) == 12003 )

ShowMsg(hWin,“ 文 件 不 存 在");

InternetCloseHandle(hHost);

InternetCloseHandle(hInternet);return 0L;

}

if ( cFlag == 0 )

InternetWriteFile(hFile,buf,dwLen, &dwLength);

else

InternetReadFile(hFile,buf,dwLen, &dwLength);

InternetCloseHandle(hFile);InternetCloseHandle(hHost);

InternetCloseHandle(hInternet);

return dwLength;

}

// 通 过FTP 协 议 删 除FTP 服 务 器 上

文 件 的 函 数cFtpHost 主 机 地 址cFile 文 件 名

BOOL MyFtpDeleteFile(char * cFtpHost,char * cFile)

{

HINTERNET hInternet,hHost;

hInternet=InternetOpen(“FZYXB",

LOCAL_INTERNET_ACCESS,

NULL,0,0);

hHost=InternetConnect(hInternet,cFtpHost,

INTERNET_INVALID_PORT_NUMBER,“fzabc",

“b505",INTERNET_SERVICE_FTP,INTERNET

_FLAG_PASSIVE,0);

FtpDeleteFile(hHost,cFile);

InternetCloseHandle(hHost);InternetCloseHandle(hInternet);

return TRUE;

}

// 本 地 计 算 机 运 行 线 程 函 数 pp 功 能 代 码

void CallThread(void * pp )

{

DWORD * dwId,dwLen, ret,ll;

RASPPPIP rip;

char szIp[50], *pdest;

dwId=(DWORD *)pp;

switch( * dwId )

{

case IDC_CALL:

// 通 知 远 程 计 算 机 登 录Internet

ShowMsg(hWin,“Call remote... ");

if ( StartCon( hWin,“connect",“",

“d123",“9W7607714" ) == TRUE )

{

ShowMsg(hWin,“Remote Connected");

// 取remote 分 配 的IP 地 址

rip.dwSize=sizeof(RASPPPIP);

if ( (ret=RasGetProjectionInfo(hCon,RASP_PppIp,

(LPVOID) &rip,(LPDWORD) &ll ) ) != 0 )

ShowMsg(hWin,“ 取IP 地 址 失 败");

else

{

ShowMsg(hWin,rip.szIpAddress);

strcpy(szIp,rip.szIpAddress);

pdest=strrchr(szIp,‘.’);

*pdest=‘\0’;strcat(szIp,“.1");

ShowMsg(hWin,szIp);

SendCmd(szIp,“REQUEST");

}

RasHangUp(hCon);

}

else

ShowMsg(hWin,“Call remote fail");

hCon=NULL;

break;

case IDC_INTERNET:

// 本 地 计 算 机 登 录Internet

ShowMsg(hWin,“ 正 在 连 接 Internet... ");

StartCon( hWin,“internet",“local@pub2.fz.fj.cn",

“aabb99",“9W163" );

break;

case IDC_ADDRESS:

// 读 取 远 程 计 算 机Internet IP 地 址

ShowMsg(hWin,“ 正 在 取 IP 地 址...");

if ( (dwLen=FtpWriteRead(“ftp.maoming.gd.cn",

“abc.txt",40,cRemoteIP,1))>0 )

{

cRemoteIP[dwLen]=‘\0’;ShowMsg(hWin,cRemoteIP);

ShowMsg(hWin,“ 删 除IP 地 址 文 件..");

MyFtpDeleteFile(“ftp.maoming.gd.cn",“abc.txt");

}

else

ShowMsg(hWin,“ 取IP 失 败");

break;

case IDC_RDISC:

// 通 知 远 程 计 算 机 断 开Internet 连 接

ShowMsg(hWin,“ 正 在 向 远 端 发 Disconnect...");

SendCmd(cRemoteIP,“DISCONNECT");

break;

}

ThreadId=0;hThread=NULL;

return;

}

// 远 程 计 算 机 运 行 线 程 函 数

void ServerThread(void * pp )

{

RASPPPIP rip;

DWORD ret,ll;

SOCKADDR_IN acc_sin, dest_sin; // 地 址

int acc_sin_len,status;

char szMsg[ MY_MSG_LENGTH ];

serv_sock = socket(AF_INET,SOCK_STREAM,0);

dest_sin.sin_family=AF_INET;

dest_sin.sin_addr.s_addr=INADDR_ANY;

dest_sin.sin_port=htons(1023);

bind(serv_sock,(struct sockaddr FAR *)

&dest_sin,sizeof(dest_sin));

listen(serv_sock,MAX_PENDING_CONNECTS);

while( TRUE )

{

acc_sin_len = sizeof(acc_sin);ShowMsg

(hWin,“ 等 待 呼 叫");

rsock = accept( serv_sock,(struct sockaddr FAR *)

&acc_sin,(int FAR *) &acc_sin_len );

if (rsock < 0)

{ShowMsg(hWin,“Accept Error!");break;}

ShowMsg(hWin,“ 收 到 连 接 请 求!");

status = recv( rsock, szMsg, MY_MSG_LENGTH,

NO_FLAGS_SET );

if (status == SOCKET_ERROR)

{ShowMsg(hWin,“Recv Error!");break;}

if (status)

{

szMsg[status] = ‘\0’; ShowMsg(hWin,szMsg);

if ( strstr(szMsg,“REQUEST") != NULL )

{

isend(rsock,“OK",2,0);

closesocket(rsock);Sleep(3000);

// 等 待 拨 号 连 接 退 出

if (StartCon( hWin,“163",“remote@pub2.fz.fj.cn",

“abcd",“163" ) == TRUE )

{

// 取 动 态 分 配 的IP 地 址

rip.dwSize=sizeof(RASPPPIP);

if ( (ret=RasGetProjectionInfo(hCon,RASP_PppIp,

(LPVOID) &rip,(LPDWORD) &ll ) ) != 0 )

{ShowMsg(hWin,“ 取IP 地 址 失 败");break;}

ShowMsg(hWin,rip.szIpAddress);ShowMsg(hWin,

“ Send IP Adrress.... !");

FtpWriteRead( “ftp.maoming.gd.cn",“abc.txt",

strlen(rip.szIpAddress),rip.szIpAddress,0);

}

else

{ShowMsg(hWin,“Connect internet fail");}

}//if ( strstr(szMsg,“REQUEST") != NULL )

if ( strstr(szMsg,“DISCONNECT") != NULL )

{

send(rsock,“OK",2,0);

closesocket(rsock);RasHangUp(hCon);

} //end if ( strstr(szMsg,“DISCONNECT") != NULL )

} //end if (status)

else

{ShowMsg(hWin,“ 连 接 断 开! 等 待 下 一 个");

closesocket(rsock);}

} //end while( TRUE )

if(hCon != NULL )

{RasHangUp(hCon);Sleep(3000);}

hCon =NULL;closesocket(serv_sock);hThread=NULL;

return;

}

// 实 现 本 地 计 算 机 向 远 程 计 算 机

发 送 命 令 的 函 数 cIp 远 程 计 算 机

IP 地 址 SzCmd 命 令 字 符 串

BOOL SendCmd(char * cIp,char * szCmd)

{

SOCKADDR_IN dest_sin; // 地 址

int status;

char szMsg[ MY_MSG_LENGTH ];

rsock = socket(AF_INET,SOCK_STREAM,0);

dest_sin.sin_family=AF_INET;dest_sin.sin_

addr.s_addr = inet_addr(cIp);

dest_sin.sin_port=htons(1023);

if (connect( rsock,(PSOCKADDR)

&dest_sin,sizeof(dest_sin) )<0 )

{ShowMsg(hWin,“ 连 接 失 败");

closesocket( rsock );return FALSE;}

if ( send(rsock,szCmd,strlen(szCmd),0) != strlen(szCmd))

{ShowMsg(hWin,“ 送 命 令 失 败");

closesocket( rsock );return FALSE;}

status = recv( rsock, szMsg, MY_MSG

_LENGTH, NO_FLAGS_SET );

if (status == SOCKET_ERROR)

{ShowMsg(hWin,“Recv Error!");

closesocket( rsock );return FALSE;}

szMsg[status] = ‘\0’;

if ( status != 0 & & strstr(szMsg,“OK") != NULL )

{closesocket( rsock );return TRUE;}

closesocket( rsock );return FALSE;

}

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有