2012年4月6日 星期五

[TCP/IP HW2] C++ 實作 Ping功能

TCP/IP 第二次作業,實作一個program可以ping某台server
OS:Win 7
Compiler:VC++2010


廢話不多說,直接原始碼


////////////////////////////////////////////////////////////////




#include <iostream>
#include <string>

using namespace std;

static string host;
static string ping_again;


void ping()
{
     system("cls");                                        //清除console畫面
     cout << "Host: ";                                     //輸入要Ping的目標
     cin >> host;
     system (("ping " + host).c_str());                    //執行ping 指令
     cout << endl;
     cout << "(Y)es or (N)o\n\n";
     cout << "Ping another host: ";
     cin >> ping_again;
     if (ping_again == "Y" || ping_again == "y")            //是否ping其他對象
     {
     system("cls");
     ping();
     }
     else if (ping_again == "N" || ping_again == "n")
     {
     system("exit");
     }
}

int main()
{
 
     ping();

     return(0);
}

//////////////////////////////////////////////////////////////////////////////////////


其中system函數在C中可以調用一些DOS的命令

原文網址


下面列出常用的DOS命令,都可以用system函數調用:
ASSOC 顯示或修改文件擴展名關聯。
AT 計劃在計算機上運行的命令和程序。
ATTRIB 顯示或更改文件屬性。
BREAK 設置或清除擴展式CTRL+C 檢查。
CACLS 顯示或修改文件的訪問控制列表(ACLs)。
CALL 從另一個批處理程序調用這一個。
CD 顯示當前目錄的名稱或將其更改。
CHCP 顯示或設置活動代碼頁數。
CHDIR 顯示當前目錄的名稱或將其更改。
CHKDSK 檢查磁盤並顯示狀態報告。
CHKNTFS 顯示或修改啟動時間磁盤檢查。
CLS 清除屏幕。
CMD 打開另一個Windows 命令解釋程序窗口。
COLOR 設置默認控制台前景和背景顏色。
COMP 比較兩個或兩套文件的內容。
COMPACT 顯示或更改NTFS 分區上文件的壓縮。
CONVERT 將FAT 卷轉換成NTFS。您不能轉換當前驅動器。
COPY 將至少一個文件複製到另一個位置。
DATE 顯示或設置日期。
DEL 刪除至少一個文件。
DIR 顯示一個目錄中的文件和子目錄。
DISKCOMP 比較兩個軟盤的內容。
DISKCOPY 將一個軟盤的內容複製到另一個軟盤。
DOSKEY 編輯命令行、調用Windows 命令並創建宏。
ECHO 顯示消息,或將命令回顯打開或關上。
ENDLOCAL 結束批文件中環境更改的本地化。
ERASE 刪除至少一個文件。
EXIT 退出CMD.EXE 程序(命令解釋程序)。
FC 比較兩個或兩套文件,並顯示不同處。
FIND 在文件中搜索文字字符串。
FINDSTR 在文件中搜索字符串。
FOR 為一套文件中的每個文件運行一個指定的命令
FORMAT 格式化磁盤,以便跟Windows 使用。
FTYPE 顯示或修改用於文件擴展名關聯的文件類型。
GOTO 將Windows 命令解釋程序指向批處理程序中某個標明的行。
GRAFTABL 啟用Windows 來以圖像模式顯示擴展字符集。
HELP 提供Windows 命令的幫助信息。
IF 執行批處理程序中的條件性處理。
LABEL 創建、更改或刪除磁盤的捲標。
MD 創建目錄。
MKDIR 創建目錄。
MODE 配置系統設備。
MORE 一次顯示一個結果屏幕。
MOVE 將文件從一個目錄移到另一個目錄。
PATH 顯示或設置可執行文件的搜索路徑。
PAUSE 暫停批文件的處理並顯示消息。
POPD 還原PUSHD 保存的當前目錄的上一個值。
PRINT 打印文本文件。
PROMPT 更改Windows 命令提示符。
PUSHD 保存當前目錄,然後對其進行更改。
RD 刪除目錄。
RECOVER 從有問題的磁盤恢復可讀信息。
REM 記錄批文件或CONFIG.SYS 中的註釋。
REN 重命名文件。
RENAME 重命名文件。
REPLACE 替換文件。
RMDIR 刪除目錄。
SET 顯示、設置或刪除Windows 環境變量。
SETLOCAL 開始批文件中環境更改的本地化。
SHIFT 更換批文件中可替換參數的位置。
SORT 對輸入進行分類。
START 啟動另一個窗口來運行指定的程序或命令。
SUBST 將路徑跟一個驅動器號關聯。
TIME 顯示或設置系統時間。
TITLE 設置CMD.EXE 會話的窗口標題。
TREE 以圖形模式顯示驅動器或路徑的目錄結構。
TYPE 顯示文本文件的內容。
VER 顯示Windows 版本。
VERIFY 告訴Windows 是否驗證文件是否已正確寫入磁盤。
VOL 顯示磁盤捲標和序列號。
XCOPY 複製文件和目錄樹。
system(執行shell 命令)
相關函數fork,execve,waitpid,popen
表頭文件#include<stdlib.h>
定義函數int system(const char * string);
函數說明system()會調用fork()產生子進程,由子進程來調用/bin/sh-c string來執行參數string字符串所代表的命令,此命令執行完後隨即返回原調用的進程。在調用system()期間SIGCHLD 信號會被暫時擱置,SIGINT和SIGQUIT 信號則會被忽略。
返回值如果system()在調用/bin/sh時失敗則返回127,其他失敗原因返回-1。若參數string為空指針(NULL),則返回非零值。如果system()調用成功則最後會返回執行shell命令後的返回值,但是此返回值也有可能為system()調用/bin/sh失敗所返回的127,因此最好能再檢查errno 來確認執行成功。
附加說明在編寫具有SUID/SGID權限的程序時請勿使用system(),system()會繼承環境變量,通過環境變量可能會造成系統安全的問題。
範例
#include<stdlib.h>
main()
{
system(“ls -al /etc/passwd /etc/shadow”);
}


原始碼下載位置



沒有留言:

張貼留言