导航:首页 > 源码编译 > vcping源码

vcping源码

发布时间:2022-07-23 02:52:00

㈠ C#源代码。数据包互ping 相互ping包

C#是一种安全的、稳定的、简单的、优雅的,由C和C++衍生出来的面向对象的编程语言。它在继承C和C++强大功能的同时去掉了一些它们的复杂特性(例如没有宏和模版,不允许多重继承)。

㈡ 求windows下ping程序c源代码,模拟的ping也行,能编译通过就行,网上很多通不过

#pragma pack(4)
#define WIN32_LEAN_AND_MEAN
#include
#include
#include
#define ICMP_ECHO 8
#define ICMP_ECHOREPLY 0
#define ICMP_MIN 8 // minimum 8 byte icmp packet (just header)
/* The IP header */
typedef struct iphdr {
unsigned int h_len:4; // length of the header
unsigned int version:4; // Version of IP
unsigned char tos; // Type of service
unsigned short total_len; // total length of the packet
unsigned short ident; // unique identifier
unsigned short frag_and_flags; // flags
unsigned char ttl;
unsigned char proto; // protocol (TCP, UDP etc)
unsigned short checksum; // IP checksum
unsigned int sourceIP;
unsigned int destIP;
}IpHeader;
//
// ICMP header
//
typedef struct _ihdr {
BYTE i_type;
BYTE i_code; /* type sub code */
USHORT i_cksum;
USHORT i_id;
USHORT i_seq;
/* This is not the std header, but we reserve space for time */
ULONG timestamp;
}IcmpHeader;
#define STATUS_FAILED 0xFFFF
#define DEF_PACKET_SIZE 32
#define MAX_PACKET 1024
#define xmalloc(s) HeapAlloc(GetProcessHeap(),HEAP_ZERO_MEMORY,(s))
#define xfree(p) HeapFree (GetProcessHeap(),0,(p))
void fill_icmp_data(char *, int);
USHORT checksum(USHORT *, int);
void decode_resp(char *,int ,struct sockaddr_in *);
void Usage(char *progname){
fprintf(stderr,"Usage: ");
fprintf(stderr,"%s [data_size] ",progname);
fprintf(stderr,"datasize can be up to 1Kb ");
ExitProcess(STATUS_FAILED);
}
int main(int argc, char **argv){
WSADATA wsaData;
SOCKET sockRaw;
struct sockaddr_in dest,from;
struct hostent * hp;
int bread,datasize;
int fromlen = sizeof(from);
int timeout = 1000;
char *dest_ip;
char *icmp_data;
char *recvbuf;
unsigned int addr=0;
USHORT seq_no = 0;
if (WSAStartup(MAKEWORD(2,1),&wsaData) != 0){
fprintf(stderr,"WSAStartup failed: %d ",GetLastError());
ExitProcess(STATUS_FAILED);
}
if (argc <2 ) {
Usage(argv[0]);
}
sockRaw = WSASocket (AF_INET,
SOCK_RAW,
IPPROTO_ICMP,
NULL, 0,0);
if (sockRaw == INVALID_SOCKET) {
fprintf(stderr,"WSASocket() failed: %d ",WSAGetLastError());
ExitProcess(STATUS_FAILED);
}
bread = setsockopt(sockRaw,SOL_SOCKET,SO_RCVTIMEO,(char*)&timeout,
sizeof(timeout));
if(bread == SOCKET_ERROR) {
fprintf(stderr,"failed to set recv timeout: %d ",WSAGetLastError());
ExitProcess(STATUS_FAILED);
}
timeout = 1000;
bread = setsockopt(sockRaw,SOL_SOCKET,SO_SNDTIMEO,(char*)&timeout,
sizeof(timeout));
if(bread == SOCKET_ERROR) {
fprintf(stderr,"failed to set send timeout: %d ",WSAGetLastError());
ExitProcess(STATUS_FAILED);
}
memset(&dest,0,sizeof(dest));
hp = gethostbyname(argv[1]);
if (!hp){
addr = inet_addr(argv[1]);
}
if ((!hp) && (addr == INADDR_NONE) ) {
fprintf(stderr,"Unable to resolve %s ",argv[1]);
ExitProcess(STATUS_FAILED);
}
if (hp != NULL)
memcpy(&(dest.sin_addr),hp->h_addr,hp->h_length);
else
dest.sin_addr.s_addr = addr;
if (hp)
dest.sin_family = hp->h_addrtype;
else
dest.sin_family = AF_INET;
dest_ip = inet_ntoa(dest.sin_addr);
if (argc >2) {
datasize = atoi(argv[2]);
if (datasize == 0)
datasize = DEF_PACKET_SIZE;
}
else
datasize = DEF_PACKET_SIZE;
datasize += sizeof(IcmpHeader);
icmp_data = xmalloc(MAX_PACKET);
recvbuf = xmalloc(MAX_PACKET);
if (!icmp_data) {
fprintf(stderr,"HeapAlloc failed %d ",GetLastError());
ExitProcess(STATUS_FAILED);
}
memset(icmp_data,0,MAX_PACKET);
fill_icmp_data(icmp_data,datasize);
while(1) {
int bwrote;
((IcmpHeader*)icmp_data)->i_cksum = 0;
((IcmpHeader*)icmp_data)->timestamp = GetTickCount();
((IcmpHeader*)icmp_data)->i_seq = seq_no++;
((IcmpHeader*)icmp_data)->i_cksum = checksum((USHORT*)icmp_data,
datasize);
bwrote = sendto(sockRaw,icmp_data,datasize,0,(struct sockaddr*)&dest,
sizeof(dest));
if (bwrote == SOCKET_ERROR){
if (WSAGetLastError() == WSAETIMEDOUT) {
printf("timed out ");
continue;
}
fprintf(stderr,"sendto failed: %d ",WSAGetLastError());
ExitProcess(STATUS_FAILED);
}
if (bwrote < datasize ) {
fprintf(stdout,"Wrote %d bytes ",bwrote);
}
bread = recvfrom(sockRaw,recvbuf,MAX_PACKET,0,(struct sockaddr*)&from,
&fromlen);
if (bread == SOCKET_ERROR){
if (WSAGetLastError() == WSAETIMEDOUT) {
printf("timed out ");
continue;
}
fprintf(stderr,"recvfrom failed: %d ",WSAGetLastError());
ExitProcess(STATUS_FAILED);
}
decode_resp(recvbuf,bread,&from);
Sleep(1000);
}
return 0;
}
/*
The response is an IP packet. We must decode the IP header to locate
the ICMP data
*/
void decode_resp(char *buf, int bytes,struct sockaddr_in *from) {
IpHeader *iphdr;
IcmpHeader *icmphdr;
unsigned short iphdrlen;
iphdr = (IpHeader *)buf;
iphdrlen = iphdr->h_len * 4 ; // number of 32-bit words *4 = bytes
if (bytes < iphdrlen + ICMP_MIN) {
printf("Too few bytes from %s ",inet_ntoa(from->sin_addr));
}
icmphdr = (IcmpHeader*)(buf + iphdrlen);
if (icmphdr->i_type != ICMP_ECHOREPLY) {
fprintf(stderr,"non-echo type %d recvd ",icmphdr->i_type);
return;
}
if (icmphdr->i_id != (USHORT)GetCurrentProcessId()) {
fprintf(stderr,"someone else's packet! ");
return ;
}
printf("%d bytes from %s:",bytes, inet_ntoa(from->sin_addr));
printf(" icmp_seq = %d. ",icmphdr->i_seq);
printf(" time: %d ms ",GetTickCount()-icmphdr->timestamp);
printf(" ");
}
USHORT checksum(USHORT *buffer, int size) {
unsigned long cksum=0;
while(size >1) {
cksum+=*buffer++;
size -=sizeof(USHORT);
}
if(size ) {
cksum += *(UCHAR*)buffer;
}
cksum = (cksum >> 16) + (cksum & 0xffff);
cksum += (cksum >>16);
return (USHORT)(~cksum);
}
/*
Helper function to fill in various stuff in our ICMP request.
*/
void fill_icmp_data(char * icmp_data, int datasize){
IcmpHeader *icmp_hdr;
char *datapart;
icmp_hdr = (IcmpHeader*)icmp_data;
icmp_hdr->i_type = ICMP_ECHO;
icmp_hdr->i_code = 0;
icmp_hdr->i_id = (USHORT)GetCurrentProcessId();
icmp_hdr->i_cksum = 0;
icmp_hdr->i_seq = 0;
datapart = icmp_data + sizeof(IcmpHeader);
//
// Place some junk in the buffer.
//
memset(datapart,'E', datasize - sizeof(IcmpHeader));
}

估计你也试过,网上搜到的。

㈢ vc6++网络编程 编写一个ping程序,测试本局与的所有机器是否在线

古色古香里应外合mq鲉欢喜雀跃的妞阿雅KL

㈣ C/C++编写一个 Ping 程序,并能测试本局域网的所有机器是否在线

//关键代码如下:
#include "icmpapi.h"
#include "iphlpapi.h"

#pragma comment(lib,"iphlpapi.lib");

bool CPINGDlg::startping(char* IP) //成功返回true, 失败返回false
{
HANDLE hIcmpFile = NULL;
unsigned long ipaddr = INADDR_NONE;
DWORD dwRetVal = 0;
char SendData[] = "Data Buffer\0";
LPVOID ReplyBuffer = NULL;
DWORD ReplySize = 0;
// PICMP_ECHO_REPLY reply;
ipaddr = inet_addr(IP);
ReplySize = sizeof(ICMP_ECHO_REPLY)+sizeof(SendData);
ReplyBuffer = (void*)malloc(ReplySize);
hIcmpFile = IcmpCreateFile();
if (hIcmpFile == INVALID_HANDLE_VALUE)
{
AfxMessageBox(_T("Ping 内部代码错误"));

return false;
}
dwRetVal = IcmpSendEcho(hIcmpFile, ipaddr, SendData, sizeof(SendData), NULL, ReplyBuffer, ReplySize, 1000);
// CloseHandle(hIcmpFile);
// free(ReplyBuffer);
if (dwRetVal != 0)
{
return true;
}
else
{
return false;
}
}

㈤ 这个易语言ping源码 谁能给下 谢谢啦 就是把IP地址输入 下面返回 PING的值。 代码不知道怎么写。

.版本 2
.如果 (编辑框1.内容 ≠ “”)
运行 (“cmd /c ping ” + 编辑框1.内容 + “-t” + “ >c:\ping.txt”, 真, #隐藏窗口)
编辑框2.内容 = 到文本 (读入文件 (“c:\ping.txt”))
删除文件 (“c:\ping.txt”)
.否则
.如果结束
是用CMD的保存文件。读取CMD的保存文件。原理就是这样

㈥ 谁能给写个vc++下可调用的ping函数

// ping.h#pragma once#include "IpMonitor.h"#include "IpMonitorDlg.h" class CIpMonitorDlg; class CPing{public: CPing(void); ~CPing(void); void Start(CIpMonitorDlg* pDialog); void Stop(); bool IsRunning(){return m_thread!= NULL;} CString m_sIp; CString m_sPort; CString m_sTimeSpan; CString m_sCommand; bool m_bStop; CIpMonitorDlg* m_pIpMonitorDlg; protected: HANDLE m_thread; DWORD m_threadId; }; //---------------- ping.cpp -------------------------//#include "StdAfx.h"#include "Ping.h"#include "afxsock.h" /* TRACE(_T("\r\n")); */ CString GetErrorMessage(){ CString msg; DWORD err = GetLastError(); LPVOID lpMsgBuf;FormatMessage( FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, NULL, err, 0, // Default language (LPTSTR) &lpMsgBuf, 0, NULL );msg.Format(_T("[%d] %s"),err, (LPCTSTR)lpMsgBuf);// Free the buffer.LocalFree( lpMsgBuf ); return msg;} void Trace(CPing* parent, LPCTSTR lpcszMSg){ TRACE(lpcszMSg); if(parent != NULL && parent->m_pIpMonitorDlg != NULL){ //ASSERT(::IsWindow(parent->m_pIpMonitorDlg->m_hWnd)); //if(::IsWindow(parent->m_pIpMonitorDlg->m_hWnd)) parent->m_pIpMonitorDlg->TraceMessage(lpcszMSg); } }DWORD WINAPI RunBody( LPVOID lpParam ){ CString msg; CPing* parent = (CPing*) lpParam; ASSERT(parent != NULL); LPCTSTR lpszHostAddress = parent->m_sIp; UINT nHostPort = _tstoi(parent->m_sPort); ASSERT(nHostPort > 0); int timespan = _tstoi(parent->m_sTimeSpan); if (timespan < 3) timespan = 3; timespan *= 1000; LPTSTR szCmdline = _tcsp(parent->m_sCommand); STARTUPINFO si; PROCESS_INFORMATION pi; ZeroMemory( &si, sizeof(si) ); si.cb = sizeof(si); ZeroMemory( &pi, sizeof(pi) ); Trace(parent,_T("thread start\r\n")); if(!AfxSocketInit ()) { msg.Format(_T("AfxSocketInit fail , %s \r\n"), GetErrorMessage()); Trace(parent,msg); return 0x01; } CSocket connect ; bool bTestOk; while(!parent->m_bStop) { if (!connect.Create(/*0, SOCK_STREAM, _T("127.0.0.1")*/)) { msg.Format(_T("connect.Create fail, %s \r\n"), GetErrorMessage()); Trace(parent,msg); } else { bTestOk = connect.Connect(lpszHostAddress, nHostPort); if(bTestOk) { msg.Format(_T("connect to %s:%s ok...\r\n"), parent->m_sIp, parent->m_sPort); } else { msg.Format(_T("connect to %s:%s fail, %s ...\r\n"), parent->m_sIp, parent->m_sPort, GetErrorMessage()); } Trace(parent,msg); connect.Close(); if(!bTestOk) { if(!CreateProcess(NULL,szCmdline, NULL, NULL, FALSE, CREATE_NEW_CONSOLE, NULL, NULL, &si, &pi)) { msg.Format(_T("Execute command fail, %s\r\n"), GetErrorMessage()); Trace(parent,msg); } } } ::Sleep(timespan); } free(szCmdline); szCmdline = NULL; Trace(parent,_T("thread end\r\n")); return 0;} CPing::CPing(void){ m_thread = NULL; m_threadId = 0; m_bStop = false;} CPing::~CPing(void){ Stop();} void CPing::Start(CIpMonitorDlg* pDialog){ TRACE(_T("CPing::Start\r\n")); ASSERT(m_thread == NULL); ASSERT(pDialog != NULL); if(m_thread != NULL) { TRACE(_T("CPing::Start m_thread != NULL\r\n")); return; } m_pIpMonitorDlg = pDialog; m_bStop = false; m_thread = CreateThread(NULL, 0, RunBody, this, NULL, &m_threadId);} void CPing::Stop(){ Trace(this, _T("CPing::Stop\r\n")); m_bStop = true; if(m_thread != NULL) { int timespan = _tstoi(m_sTimeSpan); if (timespan < 3) timespan = 3; timespan += 3; timespan *= 1000; Trace(this, _T("waiting for thread stop...\r\n")); DWORD r = ::WaitForSingleObject(m_thread, timespan); if(WAIT_TIMEOUT == r) { TRACE(_T("CPing::Stop TerminateThread ...\r\n")); TerminateThread(m_thread, 0x02); } ::CloseHandle(m_thread); m_thread = NULL; }}

㈦ 有高手帮忙解决VC++,做一个能ping的软件么代码分享下

ping.c 可以从微软获得。
http://research.microsoft.com/en-us/um/redmond/projects/invisible/src/games/ping/ping.c.htm

只要 本机 主机名和IP:
system("ipconfig");

㈧ 怎样用C++实现cmd窗口中的ping 程序谢谢高手

你可以调用系统的ping程序啊。用system(),或者exec(),C++我不太懂,在java里面调用Runtime类执行ping命令之后可以获得一个输入流,把ping的结果读进来做判断,不知道C++里面可不可以这么做,你查查函数库吧,应该有的

㈨ 用C#写一个类似cmd的控制台程序,实现ping的功能!!!(求完整程序源代码!)

using System;
using System.Net;
using System.Net.NetworkInformation;
class Program
{
static void Main(string[] args)
{
int count = 4;
IPAddress addr = IPAddress.Parse("220.181.111.86");
Ping ping = new Ping();
long timeSum = 0;
int succCount = 0;
//发送
Console.WriteLine("正在ping {0}", addr);
for (int i = 0; i < count; ++i)
{
PingReply pr = ping.Send(addr);
if (pr.Status == IPStatus.TimedOut)
Console.WriteLine("超时");
else if (pr.Status == IPStatus.Success)
{
Console.WriteLine("延时:{0}毫秒", pr.RoundtripTime);
++succCount;
timeSum += pr.RoundtripTime;
}
}
if (timeSum != 0)
Console.WriteLine("平均延时{0}毫秒,丢包率{1}%", 1.0 * timeSum / succCount, (count - succCount) * 100.0 / count);
else
Console.WriteLine("丢包率100%");
return;
}
}

阅读全文

与vcping源码相关的资料

热点内容
福州溯源码即食燕窝 浏览:232
当乐服务器怎么样 浏览:713
nc编程软件下载 浏览:382
如何限制手机app的使用 浏览:307
安卓华为手机怎么恢复桌面图标 浏览:956
我的世界电脑版服务器地址在哪找 浏览:533
违抗了命令 浏览:256
安卓如何实现拖拽放置 浏览:91
净资产收益率选股指标源码 浏览:599
血压力传感器计算公式单片机 浏览:466
全网接口vip影视解析源码 浏览:916
如何破解服务器远程密码错误 浏览:377
平安深圳app如何实名认证 浏览:500
linux网络监控软件 浏览:889
内网服务器如何上传文件 浏览:140
程序员在你心中是什么 浏览:1
苹果手机怎么找回app账号 浏览:466
房屋中介网站源码 浏览:29
命运格数算法 浏览:852
ets3编程 浏览:730