【求教】怎么用c语言来判断网络是否通

lslcxlsl 2013-03-07 03:49:36
比如 用ping 192.168.1.12 让c语言判断 是通还是不通怎么来实现
...全文
679 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
AnYidan 2013-03-07
  • 打赏
  • 举报
回复
1。网上有 ping 的原代码,但在 win7 下有 权限问题 2。 system ("ping 127.0.0.1 > 1.txt"); 分析 1.txt
loveheronly 2013-03-07
  • 打赏
  • 举报
回复
int Ping(LPCSTR pstrHost) { int nErrorNum=0; SOCKET rawSocket; LPHOSTENT lpHost; struct sockaddr_in saDest; struct sockaddr_in saSrc; DWORD dwTimeSent; DWORD dwElapsed; u_char cTTL; int nLoop; int nRet; // Create a Raw socket rawSocket = socket(AF_INET, SOCK_RAW, IPPROTO_ICMP); if (rawSocket == SOCKET_ERROR) { ReportError("socket()"); return -1; } // Lookup host lpHost = gethostbyname(pstrHost); if (lpHost == NULL) { fprintf(stderr,"\nHost not found: %s\n", pstrHost); return -2; } // Setup destination socket address saDest.sin_addr.s_addr = *((u_long FAR *) (lpHost->h_addr)); saDest.sin_family = AF_INET; saDest.sin_port = 0; // Tell the user what we're doing printf("\nPinging %s [%s] with %d bytes of data:\n", pstrHost, inet_ntoa(saDest.sin_addr), REQ_DATASIZE); // Ping multiple times for (nLoop = 0; nLoop < 2; nLoop++) //原来为4 { // Send ICMP echo request SendEchoRequest(rawSocket, &saDest); // Use select() to wait for data to be received nRet = WaitForEchoReply(rawSocket); if (nRet == SOCKET_ERROR) { ReportError("select()"); nErrorNum = nErrorNum+1; break; } if (!nRet) { printf("\nTimeOut"); nErrorNum = nErrorNum+1; break; } // Receive reply dwTimeSent = RecvEchoReply(rawSocket, &saSrc, &cTTL); // Calculate elapsed time dwElapsed = GetTickCount() - dwTimeSent; printf("\nReply from: %s: bytes=%d time=%ldms TTL=%d", inet_ntoa(saSrc.sin_addr), REQ_DATASIZE, dwElapsed, cTTL); } printf("\n"); nRet = closesocket(rawSocket); if (nRet == SOCKET_ERROR) ReportError("closesocket()"); return nErrorNum; }
赵4老师 2013-03-07
  • 打赏
  • 举报
回复
仅供参考
#include <windows.h>
#include <stdio.h>
char cmdstr[256];
int i;
int YN(int k) {
    FILE *f;
    char fn[40];
    char ln[80];
    int yn=0;

    sprintf(fn,"d:\\ping%d.txt",k);
    f=fopen(fn,"r");
    if (NULL!=f) {
        fgets(ln,80,f);
        fgets(ln,80,f);
        fgets(ln,80,f);
        if (1==fscanf(f,"Re%c",&yn)) yn='q'-yn;
        fclose(f);
        unlink(fn);
    }
    return yn;
}
void main() {
    for (i=115;i<130;i++) {
        sprintf(cmdstr,"cmd /c ping 192.168.2.%d -n 1 -w 1000 >d:\\ping%d.txt",i,i);
        WinExec(cmdstr,SW_HIDE);
    }
    Sleep(3000);
    for (i=115;i<130;i++) {
        printf("%d 192.168.2.%d\n",YN(i),i);
    }
}
//1 192.168.2.115
//0 192.168.2.116
//0 192.168.2.117
//0 192.168.2.118
//1 192.168.2.119
//0 192.168.2.120
//0 192.168.2.121
//0 192.168.2.122
//1 192.168.2.123
//0 192.168.2.124
//0 192.168.2.125
//1 192.168.2.126
//0 192.168.2.127
//1 192.168.2.128
//0 192.168.2.129
Joseph_ 2013-03-07
  • 打赏
  • 举报
回复
管道: fp = popen("ping 192.168.1.12","r"); 然后通过读管道的内容就是 ping之后的回复,可以判断啊 另外你可以直接: system("ping 192.168.1.12 >> internet.info"); 然后读文件internet.info 分析是否通啊。
qq120848369 2013-03-07
  • 打赏
  • 举报
回复
icmp探测。

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧