MFC使用winpcap 抓包 pcap_compile使用

2023-05-16

使用Winpcap编写:

最近工作需要抓取傻瓜交换机的MAC,由于没有IP只能使用Winpcap抓包工具来实现。本人初学者,大佬请绕行。

a, 先获取电脑的网卡信息

在SwithCheckMacDlg.h文件中定义两个全局变量

pcap_if_t *alldevs;   // pcap_if 结构体中包含了适配器的详细信息
pcap_if_t *d;

void CSwithCheckMacDlg::GetNetworkSource()
{	
	int i=0;	
	CString m_sTemp = "";

	/* 获得设备列表 */
	//int	pcap_findalldevs(pcap_if_t **, char *);
	if (pcap_findalldevs_ex(PCAP_SRC_IF_STRING,NULL,							
		&alldevs,			// 输出参数,详细信息	
		errbuf				// 缓冲区 大小为PCAP_BUF_SIZE,函数失败是保存错误
		) == -1)
	{
		fprintf(stderr,"Error in pcap_findalldevs: %s\n", errbuf);
		exit(1);
	}

	/* 打印列表 */
	CString NetCardInfo = "";
	for(d=alldevs; d != NULL; d=d->next)
	{
		m_sTemp.Format("%d.%s\r\n",++i,d->name);
		m_RunMsgEdit.ReplaceSel(m_sTemp);
		if (d->description)
		{
			m_sTemp.Format("(%s)\r\n",d->description);
			m_RunMsgEdit.ReplaceSel(m_sTemp);
			NetCardInfo.Format("%d. %s",i,d->description);
			m_NetworkCard.AddString(NetCardInfo);
		}	
		else
		{
			m_sTemp.Format("(No description available) %s\r\n",d->description);
			m_RunMsgEdit.ReplaceSel(m_sTemp);
		}
	}

	if(i==0)
	{
		m_RunMsgEdit.ReplaceSel("No interfaces found! Make sure WinPcap is installed.\r\n");
	}
	//pcap_freealldevs(alldevs);
	//GetSwithMac();
}

b, 获取交换机的MAC地址 和 所选择网卡的MAC地址

pcap_compile() 过滤条件的设置,以下我验证了协议类型和通过源IP和目标MAC过滤获取相应的信息

例如: char packet_filter[] = "src host 192.168.1.1";

参考链接:https://blog.csdn.net/a1009563517/article/details/47311813

char packet_filter[] = "src host 192.168.1.1";

//编译过滤器
	if (pcap_compile(adhandle, &fcode, packet_filter, 1, netmask) <0 )
	{
		m_RunMsgEdit.ReplaceSel("Unable to compile the packet filter. Check the syntax.\r\n");
	    /* 释放设备列表 */
	    pcap_freealldevs(alldevs);
	}

	//设置过滤器
	if (pcap_setfilter(adhandle, &fcode)<0)
	{
		m_RunMsgEdit.ReplaceSel("Error setting the filter.\r\n");
	    /* 释放设备列表 */
	    pcap_freealldevs(alldevs);
	}

 

完整代码片: 

// 获取MAC号
void CSwithCheckMacDlg::GetSwithMac()
{
	int inum = 0;
	int i=0;
	u_int netmask;
	CString m_sTemp = "";


	//char packet_filter[] = "ether proto 0x8899";
	//char packet_filter[] = "ether proto 0x0800";
	//char packet_filter[] = "ether dst c8:a7:76:a7:ae:8a";
	char packet_filter[] = "src host 192.168.1.1";

	struct bpf_program fcode;
	
	//Sleep(10000);
	int index = m_NetworkCard.GetCurSel();
	CString strl;

	inum = index + 1;
	
	/* 跳转到已选设备 */
	for(d=alldevs, i=0; i< inum-1 ; d=d->next, i++);


	// 获取打开的网卡的mac号
	LPADAPTER	lpAdapter = 0;
	DWORD		dwErrorCode;
	PPACKET_OID_DATA  OidData;
	BOOLEAN		Status;
	char addr_mac[1024] = {0};

	strl.Format("%s",d->name);
	strl = strl.Mid(strl.Find('\\'));
	memcpy(addr_mac,strl.GetBuffer(0),strl.GetLength());
	m_AdapterName.Format("%s",addr_mac);
	//AfxBeginThread(StartMainThread,this,0,0,THREAD_PRIORITY_NORMAL,NULL);
	
	lpAdapter = PacketOpenAdapter((addr_mac));
	if (!lpAdapter || (lpAdapter->hFile == INVALID_HANDLE_VALUE))
	{
		dwErrorCode = GetLastError();
		m_sTemp.Format("Unable to open the adapter, Error Code : %lx\r\n",dwErrorCode);
		m_RunMsgEdit.ReplaceSel(m_sTemp);
		return;
	}

	OidData = (PPACKET_OID_DATA)malloc(6 + sizeof(PACKET_OID_DATA));
	if (OidData == NULL) 
	{
		m_sTemp.Format("error allocating memory!\r\n");
		PacketCloseAdapter(lpAdapter);
		m_RunMsgEdit.ReplaceSel(m_sTemp);
		return ;
	}

	OidData->Oid = OID_802_3_CURRENT_ADDRESS;

	OidData->Length = 6;
	ZeroMemory(OidData->Data, 6);

	Status = PacketRequest(lpAdapter, FALSE, OidData);
	if(Status)
	{
		NetMac.Format("%.2x:%.2x:%.2x:%.2x:%.2x:%.2x",(OidData->Data)[0],(OidData->Data)[1],(OidData->Data)[2],(OidData->Data)[3],(OidData->Data)[4],(OidData->Data)[5]);
		NetMac.MakeUpper();
		m_sTemp.Format("The MAC address of the adapter is %.2x:%.2x:%.2x:%.2x:%.2x:%.2x\r\n",
			(OidData->Data)[0],
			(OidData->Data)[1],
			(OidData->Data)[2],
			(OidData->Data)[3],
			(OidData->Data)[4],
			(OidData->Data)[5]);
		m_RunMsgEdit.ReplaceSel(m_sTemp);
	}
	else
	{
		m_sTemp.Format("error retrieving the MAC address of the adapter!\n");
		m_RunMsgEdit.ReplaceSel(m_sTemp);
	}

	free(OidData);
	PacketCloseAdapter(lpAdapter);
	// 开始ping线程
	AfxBeginThread(ReadNetWorkRate,this,0,0,THREAD_PRIORITY_NORMAL,NULL);

	/* 打开适配器  指定网络设备进行抓包/发包*/
	if ( (adhandle= pcap_open(d->name,  // 设备名
		65536,     // 要捕捉的数据包的部分
		// 65535保证能捕获到不同数据链路层上的每个数据包的全部内容
		PCAP_OPENFLAG_PROMISCUOUS,         // 混杂模式
		1000,      // 读取超时时间
		NULL,
		errbuf     // 错误缓冲池
		) ) == NULL)
	{
		m_RunMsgEdit.ReplaceSel("Unable to open the adapter. is not supported by WinPcap\r\n");
		/* 释放设备列表 */
		pcap_freealldevs(alldevs);
	}

	/* 检查数据链路层,为了简单,我们只考虑以太网 */
	if(pcap_datalink(adhandle) != DLT_EN10MB)
	{
		m_RunMsgEdit.ReplaceSel("This program works only on Ethernet networks.\r\n");
		/* 释放设备列表 */
		pcap_freealldevs(alldevs);
	}

	if (d->addresses->addr->sa_family == AF_INET6)
	{
		d->addresses = d->addresses->next;
	}

	if(d->addresses != NULL)
		/* 获得接口第一个地址的掩码 */
		netmask=((struct sockaddr_in *)(d->addresses->netmask))->sin_addr.S_un.S_addr;
	else
		/* 如果接口没有地址,那么我们假设一个C类的掩码 */
		netmask=0xffffff;


	//编译过滤器
	if (pcap_compile(adhandle, &fcode, packet_filter, 1, netmask) <0 )
	{
		m_RunMsgEdit.ReplaceSel("Unable to compile the packet filter. Check the syntax.\r\n");
	    /* 释放设备列表 */
	    pcap_freealldevs(alldevs);
	}

	//设置过滤器
	if (pcap_setfilter(adhandle, &fcode)<0)
	{
		m_RunMsgEdit.ReplaceSel("Error setting the filter.\r\n");
	    /* 释放设备列表 */
	    pcap_freealldevs(alldevs);
	}

	m_sTemp.Format("listening on %s....\r\n",d->description);
	m_RunMsgEdit.ReplaceSel(m_sTemp);

	/* 释放设备列表 */
	pcap_freealldevs(alldevs);

	/* 开始捕捉 */
	//pcap_loop(adhandle, 0, packet_handler, NULL);
	int res;
	struct pcap_pkthdr *header;
	const u_char *pkt_data;
	time_t local_tv_sec;
	struct tm ltime;
	char timestr[16];
	mac_header *mh;
	u_short ethernet_type;
	ip_header *ih;
	tcp_header *th;
	u_int ip_len;
	u_short sport,dport;
	int n_Count = 0;
	pcap_stat ps;
	int nRet = 0;
	u_int nRecv1 = 0;
	u_int nRecv2 = 0;
	CString OldMac = "";
	while((res = pcap_next_ex(adhandle,&header,&pkt_data)) >= 0)
	{
		if (m_DeviceConnetFlag == FALSE)
		{
			m_PingMacFalg = FALSE;
			AigenTestUpdateUI();
			continue;
		}
		Sleep(100);
		nRet = pcap_stats(adhandle, &ps);
		m_sTemp.Format("%d", nRet);
		nRecv2 = ps.ps_recv;
		if(nRecv2 > nRecv1)
		{
			nRecv1 = nRecv2;
			n_Count = 0;
		}
		else
		{
			if (bDisConnectCount == n_Count)
			{
				//AigenTestUpdateUI();
				//m_PingMacFalg = FALSE;
				n_Count = 0;
			}
			n_Count++;
			Sleep(bDisConnectTime);
			continue;
		}

		if (res == 0 )
		{
			continue;
		}
		n_Count = 0;

		if (m_PingMacFalg == TRUE)		// 判断交换机是否连接了PC机
		{
			continue;
		}
		m_PingMacFalg = TRUE;

		m_ScanMsgEdit.EnableWindow(TRUE);
		m_TestMsgStatic.SetWindowTextA("正在Check MAC...");
		/*将时间戳转换为可读格式*/
		//local_tv_sec = header->ts.tv_sec;
		//localtime_s(&ltime,&local_tv_sec);
		//strftime(timestr,sizeof(timestr),"%H:%H:%S",&ltime);
		///* 打印数据包的时间戳和长度 */
		//m_sTemp.Format("%s,%.6d len: %d\r\n",timestr,header->ts.tv_usec,header->len);

		//m_RunMsgEdit.ReplaceSel(m_sTemp);

		//获得MAC帧头部位置
		mh = (mac_header *)(pkt_data);
		m_RunMsgEdit.ReplaceSel("正在Check MAC...\r\n");
		m_RunMsgEdit.ReplaceSel("以太网类型为 : \t\r\n");
		ethernet_type = ntohs(mh->type);
		m_sTemp.Format("%04x\r\n",ethernet_type);
		m_RunMsgEdit.ReplaceSel(m_sTemp);

		/* 获得IP数据包头部的位置 */
		ih = (ip_header *) (pkt_data +14); //以太网头部长度

		switch(ethernet_type)            /*判断以太网类型的值*/
		{
		case 0x0800 :  
			m_sTemp.Format("网络层是:\tIPv4协议\r\n");
			/*if(ih->ip_protocol != 1)
			{
				m_PingMacFalg = FALSE;
				continue;
			}*/
			break;
		case 0x0806 :  
			m_sTemp.Format("网络层是:\tARP协议\r\n");break;
		case 0x8035 :  
			m_sTemp.Format("网络层是:\tRARP 协议\r\n");break;
		case 0x8899 :  
			m_sTemp.Format("网络层是:\tRARP 协议\r\n");break;
		default: 
			m_PingMacFalg = FALSE;
			continue;
		}
		m_RunMsgEdit.ReplaceSel(m_sTemp);	
	
		///获得TCP首部的位置
		//ip_len = (ih->ihl) * 4;
		//th = (tcp_header *) ((u_char*)ih + ip_len);
		//
		///* 将网络字节序列转换成主机字节序列 */
		//sport = ntohs( th->sport );
		//dport = ntohs( th->dport );

		SourceMac = "";
		AimsMac = "";
		SourceMac.Empty();
		AimsMac.Empty();

		SourceMac.Format("%02x:%02x:%02x:%02x:%02x:%02x",mh->saddr.byte1,mh->saddr.byte2,mh->saddr.byte3,mh->saddr.byte4,mh->saddr.byte5,mh->saddr.byte6);
		AimsMac.Format("%02x:%02x:%02x:%02x:%02x:%02x",mh->daddr.byte1,mh->daddr.byte2,mh->daddr.byte3,mh->daddr.byte4,mh->daddr.byte5,mh->daddr.byte6);
		m_sTemp.Format("获取MAC源地址: \t\t%s\r\n",SourceMac);
		m_RunMsgEdit.ReplaceSel(m_sTemp);
		m_sTemp.Format("获取MAC目的地址: \t%s\r\n",AimsMac);
		m_RunMsgEdit.ReplaceSel(m_sTemp);
		Sleep(1000);
		SourceMac.MakeUpper();
		AimsMac.MakeUpper();
		CString sMac = "";

		if (SourceMac == NetMac || AimsMac == NetMac)
		{
			m_PingMacFalg = FALSE;
			continue;
		}

		if (SourceMac == "FF:FF:FF:FF:FF:FF")
		{
			sMac = AimsMac;
		}
		else if (AimsMac == "FF:FF:FF:FF:FF:FF")
		{
			sMac = SourceMac;
		}
		else
		{
			m_PingMacFalg = FALSE;
			continue;
		}
		
		m_sTemp.Format("获取MAC源地址: \t\t%s\r\n",SourceMac);
		m_RunMsgEdit.ReplaceSel(m_sTemp);
		m_sTemp.Format("获取MAC目的地址: \t%s\r\n",AimsMac);
		m_RunMsgEdit.ReplaceSel(m_sTemp);
		//m_PingMacFalg = FALSE;

		CString strMac = "";
		GetDlgItem(IDC_MINMAC_EDIT)->GetWindowTextA(strMac);
		if (!CropMac(strMac,sMac))
		{
			AfxMessageBox("温馨提示:\r\n\t 获取MAC号非法");
			m_sTemp.Format("获取MAC非法\r\n");
			m_RunMsgEdit.ReplaceSel(m_sTemp);
			m_TestResultFalg = FALSE;
			continue;
		}
		strMac.Empty();
		GetDlgItem(IDC_MAXMAC_EDIT)->GetWindowTextA(strMac);
		if (!CropMac(sMac,strMac))
		{
			AfxMessageBox("温馨提示:\r\n\t 获取MAC号非法");
			m_sTemp.Format("获取MAC非法\r\n");
			m_RunMsgEdit.ReplaceSel(m_sTemp);
			m_TestResultFalg = FALSE;
			continue;
		}		

		SourceMac = sMac;
		startTestFlag = TRUE;
		//if (ps.ps_recv > 100)
		//{
		//	ps.ps_recv = 0;
		//	nRecv1 = 0;
		//	nRecv2 = 0;
		//}
		m_sTemp.Format("获取交换机得MAC: \t%s\r\n",sMac);
		m_RunMsgEdit.ReplaceSel(m_sTemp);

		m_ScanWin.DoModal();
		barCode = m_ScanWin.ScanBarCode;
		if (startTestFlag == TRUE && barCode != "")
		{
			assySnValue.Empty();
			assySnValue = barCode;
			startTestFlag = FALSE;
			//GetDlgItem(IDC_SCAN_MSG_EDIT)->EnableWindow(FALSE);
			//AfxBeginThread(StartMainThread,this,0,0,THREAD_PRIORITY_NORMAL,NULL);
			CheckMesMac();
		}
		else
		{
			m_TestMsgStatic.SetWindowTextA("Check MAC失败");
			assySnValue.Empty();
			startTestFlag = FALSE;
			UpdateWinResult(FALSE);
		}
		/*GetDlgItem(IDC_SCAN_MSG_EDIT)->SetFocus();
		m_TestMsgStatic.SetWindowTextA("请扫描SN测试");*/
	}

	if (res == -1)
	{
		m_sTemp.Format("读取数据包时出错:%s \r\n",pcap_geterr(adhandle));
	}
}

C, 怎么检查设备是否已经上线

刚开始我通过抓包数量是否增加来判断交换机是否如PC机已经连接。但是不是特别的好用,后来在高人的指点下,只用网卡的连接速率来判断交换机是否连接了PC机(没有连接是,网卡的速率是0.0Mbps)。

完整代码:

UINT __cdecl CSwithCheckMacDlg::ReadNetWorkRate(LPVOID pParam)
{
	CSwithCheckMacDlg *ptr = (CSwithCheckMacDlg *) pParam;

	DWORD dwOutBufLen = 0;
	PIP_ADAPTER_INFO pAdapterInfo = NULL, pAdapter = NULL, pAdapterOld = NULL;
	MIB_IFROW zSNMP;
	char sTemp[20];
	int iReturn;

	iReturn = GetAdaptersInfo(pAdapterInfo, &dwOutBufLen);
	if (iReturn != ERROR_BUFFER_OVERFLOW)
	{
		return 0;
	}

	pAdapterInfo = (PIP_ADAPTER_INFO)HeapAlloc(GetProcessHeap(), 0, dwOutBufLen);
	iReturn = GetAdaptersInfo(pAdapterInfo, &dwOutBufLen);
	if (iReturn != ERROR_SUCCESS)
	{
		HeapFree(GetProcessHeap(), 0, pAdapterInfo);
		return 0;
	}
	pAdapter = pAdapterInfo;

	//find if there is ppp adapter
	double iIfSpeed;
	while(TRUE)
	{
		if (TRUE == ptr->m_CloseDeviesThread)
		{
			return 0;
		}
		while (pAdapter != NULL)
		{
			if (TRUE == ptr->m_CloseDeviesThread)
			{
				return 0;
			}
			CString pName = pAdapter->AdapterName;
			if (ptr->m_AdapterName.Find(pName) != -1)
			{
				zSNMP.dwIndex = pAdapter->Index;
				iReturn = GetIfEntry(&zSNMP);
				if (iReturn != NO_ERROR)
					return 0;

				iIfSpeed = 1.0*zSNMP.dwSpeed / (1000 * 1000);   //----------你要的速率  
				if (0.0 != iIfSpeed)
				{
					ptr->m_DeviceConnetFlag = TRUE;
				}
				else
				{
					ptr->m_DeviceConnetFlag = FALSE;
				}
			}
				pAdapter = pAdapter->Next;
				if (pAdapter == nullptr)
				{
					pAdapter = pAdapterInfo;
				}
		}
	}
	return 0;
}

完整工程界面: 

完整工程代码下载链接:https://download.csdn.net/download/yyhuyuming/11783683

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

MFC使用winpcap 抓包 pcap_compile使用 的相关文章

  • dll 中的 MFC LoadString 失败

    我在 dll 中有一个静态函数 它使用 LoadString 从资源加载字符串 当我从该 dll 调用此函数时 一切正常 但是 当我从其他模块 activeX 控件 调用此函数时 LoadString 失败并出现错误 ERROR RESOU
  • DirectUI 的真相是什么? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我正在开发一个 Windows 桌面应用程序 它需要一个很棒的 UI 我现在使用Visual Studio和MFC 后来听说DirectU
  • 缓存从 pcap 捕获的数据包

    这是对此的后续问题 重建数据包以通过 pcap 注入 https stackoverflow com questions 8193281 rebuilding a packet to inject via pcap 我想要实现的目标 fun
  • 具有透明背景的CWnd

    我想创建一个基于 CWnd 的类 它将引入具有透明背景的控件 只要内容是静态的 创建一个控件并用透明背景绘制其内容对我来说没什么大不了的 问题是当我想创建一个内容不断变化的控件时 这是因为我不知道如何用父背景删除控件的内容 一般情况下可能不
  • MFC:如何减少OnInitialUpdate()滚动的时间成本?

    我需要打印多行数据 每行都可以进行文本换行 因此高度会有所不同 要进行滚动 我需要导出总高度 由于每条线可能有不同的高度 我只能遍历每条线来累加高度 如下所示 void CMyScrollView OnInitialUpdate for a
  • AfxGetAppName() 返回垃圾字符

    我的应用程序中有以下代码行 CString strAppName AfxGetAppName 有时会充满strAppName出现了垃圾字符 我不明白为什么 有人有主意吗 TIA 如果你改变的话这是可能的m pszAppName手动 在应用程
  • 如何将 pcap 文件流式传输到 RTP/RTCP 流?

    我已经捕获了三个不同的流作为带有元数据的 pcap 文件 如何流回 RTP RTCP 流 如果我理解正确的话 你有 pcap 但你想从他们那里得到 RTP 吗 Wireshark 用户界面 您可以使用 Wireshark 的 UI 通过菜单
  • 如何向 CMFCPopupMenu 添加图标?

    我想用CMFCPopupMenu用于右键单击期间的弹出菜单 如何添加图标CMFCPopupMenu 这是我在基本 MFC 应用程序中尝试的示例代码 CMFCPopupMenu TestCMFCPopMenu new CMFCPopupMen
  • 与 UltraHD 兼容的 CHtmlView

    CHtmlView与 UltraHD 分辨率不兼容 实现 UltraHD 感知并不仅仅在于使用正确的 HTML CSS 打印预览机制失败并裁剪页面 许多个月前 微软承认这是一个问题 但没有解决它 我的应用程序大量使用CHtmlView用于显
  • 如何找到激活时打开给定 HMENU 的菜单项(如果有)?

    我想用原型实现一个功能 Locates the menu item of the application which caused the given menu mnu to show up return true if the given
  • MFC 是否提供了将文本放入剪贴板的快速方法?

    我们的代码库中的添加到剪贴板代码非常低级 分配全局内存等等 对于简单的情况 我只想将一些纯文本放在剪贴板上 是否有任何例程可以包装所有这些内容 一个例子是 CRichEditCtrl 具有 Copy 和 Cut 方法 可以自动将当前选择放入
  • MFC:如何在一个函数中捕获对话框每个控件的设置焦点

    我有 n 个对话框 它们具有相同的基本对话框 每个对话框都有自己的控件 编辑框 组合框 列表控件 etc 在基本对话框中 如何设置每个控件的焦点消息 例如 给出一个消息框 text Hello I got focus my ID is d
  • 如何停止对辅助隐式加载 DLL 的 DLL 劫持

    例如 COMDLG32 DLL 隐式链接到以下系统 DLL 以及其他 xmllite dll dll srvcli dll wkscli dll 链接信息库 netutils dll 微星 dll 由于这些是由操作系统隐式加载的 而不是使用
  • 如何将命名管道字符串从非托管代码空间发送到托管代码空间?

    我似乎遇到了命名管道 101 问题 我有一个非常简单的设置来连接从 C 非托管应用程序传输到 C 托管应用程序的单工命名管道 管道已连接 但我无法通过管道发送 消息 除非我关闭似乎刷新缓冲区并传递消息的句柄 就好像消息被屏蔽了一样 我尝试颠
  • 如何在VC++/MFC中替换字符串中两个子字符串之间的字符串?

    假设我有一个 CString 对象 strMain AAAABBCCCCCCDDBBCCCCCCCCDDDAA 我还有两个较小的字符串 例如 strSmall1 BB strSmall2 DD 现在 我想替换 strMain 中 strSm
  • Scapy 和 rdpcap 函数

    我在用着rdpcapScapy 的函数读取 PCAP 文件 我还使用中描述的模块Scapy 中 HTTP 支持的链接 http blog sbarbeau fr 2011 06 http support in scapy html在我的例子
  • 获取正在运行的程序的属性

    我想开发一个程序 其 ID 是一张牌 因为它在另一个正在运行的程序 例如扑克或红心游戏或其他程序 中播放 我首先尝试获取有关已运行的游戏程序的所需信息 但我从一开始就遇到了问题 我正在运行 MSVC 2013 并开发 MFC 应用程序 现在
  • 错误 C2248: 'CObject::CObject' : 无法访问类 'CObject' afxwin.h 中声明的私有成员

    我试图让班级负责在灰色背景上放置一些文本 Score h pragma once class Score public Score Score void UpdateScore int points void UpdateLives int
  • 从模态 MFC 表单获取输入信息

    我已经创建了表格CPreparationDlg具有Edit Control 然后我创建了创建模态表单的应用程序 在按 确定 后 我需要将编辑控件中输入的文本读入主程序的变量中 最好的方法是什么 class CPreparationApp p
  • 捕获实时流量时如何开启纳秒精度?

    如何告诉 libpcap v1 6 2 将纳秒值存储在struct pcap pkthdr ts tv usec 而不是微秒值 捕获实时数据包时 Note This question is similar to How to enable

随机推荐

  • 10-164 查询图书表中全部图书的最高售价、最低售价和平均售价

    分数 3 全屏浏览题目 切换布局 作者 刘冬霞 单位 山东理工大学 本题目要求编写SQL语句 xff0c 查询图书表中全部图书的最高售价 最低售价和平均售价 提示 xff1a 请使用SELECT语句作答 表结构 图书 xff08 条形码 文
  • Proteus8.15 Professional的安装

    Proteus8 15 Professional的安装 基本介绍 Proteus 8 15 Pro是一款计算机辅助设计电子电路的软件包 该封装是一个基于PSPICE电子元件模型的电路仿真系统 Proteus 8是一个单一的应用程序 xff0
  • Kaldi语音识别技术(六) ----- DTW和HMM-GMM

    Kaldi语音识别技术 六 DTW和HMM GMM 文章目录 Kaldi语音识别技术 六 DTW和HMM GMM前言一 语音识别概况二 语音识别基本原理三 DTW xff08 动态时间弯折 xff09 算法四 GMM HMM 前言 前面的内
  • Kaldi语音识别技术(七) ----- 训练GMM

    Kaldi语音识别技术 七 GMM 文章目录 Kaldi语音识别技术 七 GMM训练GMMtrain mono sh 用于训练GMM训练GMM 生成文件训练GMM final模型查看训练GMM final occs查看训练GMM 对齐信息查
  • Kaldi语音识别技术(八) ----- 整合HCLG

    Kaldi语音识别技术 八 整合HCLG 文章目录 Kaldi语音识别技术 八 整合HCLGHCLG 概述组合LG fst可视化 LG fst 组合CLG fst可视化CLG fst 生成H fst组合HCLG fst生成HaCLG fst
  • 测试cudnn是否安装成功(针对没反应的问题)

    安装cudnn后 xff0c 使用网上的命令行查看cudnn是否安装成功 cat usr local cuda include cudnn h grep CUDNN MAJOR A 2 发现没反应 发生甚么事了 xff1f 奥 xff0c
  • Python零基础入门基础教程(非常详细)

    目前python可以说是一门非常火爆的编程语言 xff0c 应用范围也非常的广泛 xff0c 工资也挺高 xff0c 未来发展也极好 Python究竟应该怎么学呢 xff0c 我自己最初也是从零基础开始学习Python的 xff0c 给大家
  • Spring Boot整合Mybatis-Plus和PageHelper分页插件

    Spring Boot整合Mybatis Plus和PageHelper分页插件 1 导入依赖 span class token comment lt Lombok提供了一组有用的注释 xff0c 用来消除Java类中的大量样板代码 gt
  • centos7同时安装Python2和Python3

    目录 1 背景2 安装1 1 1版本的openssl3 安装centos依赖包4 下载5 解压6 安装7 创建软链接8 ssl的使用验证9 配置阿里云镜像加速 本文适用于Python 3 10 5版本 xff0c 已经过测试 1 背景 我们
  • centos7安装mysql8.0.31版本

    目录 1 卸载mariadb2 下载3 安装4 修改 etc my cnf5 启动6 修改密码 1 卸载mariadb 因centos7默认安装了mariadb 会造成依赖冲突 xff0c 按下列方式进行卸载 xff1a root 64 c
  • 10-204 在员工表中查询所有男性员工的编号,姓名和入职日期,结果按员工编号升序排列

    分数 3 全屏浏览题目 切换布局 作者 刘冬霞 单位 山东理工大学 查询所有男性员工的编号 xff0c 姓名和入职日期 xff0c 结果按员工编号升序排列 表结构 员工 xff08 员工编号 文本型 xff0c 姓名 文本型 xff0c 性
  • Ubuntu18.04安装cuDNN

    Ubuntu18 04安装cuDNN 一 xff1a 安装准备 xff08 1 xff09 选择cudnn版本 官网cudnn链接 xff1a https developer nvidia com rdp cudnn archive 选择c
  • 自动写代码?别闹了!

    大家好 xff0c 我是良许 这几天 xff0c GitHub 上有个很火的插件在抖音刷屏了 Copilot 这个神器有啥用呢 xff1f 简单来讲 xff0c 它就是一款由人工智能打造的编程辅助工具 我们来看看它有啥用 首先就是代码补全功
  • C++构造函数的调用

    对象特性 构造函数和析构函数 构造函数 没有回值也不写void 函数值和类名相同 构造函数可以有参数 xff0c 因此可以发生重载 程序在调用对象的时候自动调用构造 xff0c 无须手动调用 xff0c 只能调用一次 析构函数语法 析构函数
  • Python基础---output【print()】

    一 输出字符串 1 一般字符串 gt gt gt print 34 My name is Pegga 34 My name is Pegga 2 输出带单引号 xff08 xff09 的字符串 方法一 xff1a gt gt gt prin
  • sqlite3命令读出sqlite3格式的文件内容案例

    Author Samson Date 07 09 2014 Test platform 3 11 0 11 generic 19 Ubuntu GNU bash version 4 2 45 sqlite是一个嵌入式的SQL数据库引擎 xf
  • Debian改变系统语言环境(中文切换到英文)实例

    Author Samson Date 08 15 2015 Test platform gcc 4 8 2 GNU bash 4 3 11 1 release x86 64 pc linux gnu Debian 8 Debian下如何设置
  • nest.js创建以及error相关问题

    开始之前 xff0c 你可以使用 Nest CLI 创建项目 xff0c 也可以克隆一个 starter project xff08 两者的结果是一样的 xff09 若要使用 Nest CLI 构建项目 xff0c 请运行以下命令 这将创建
  • java读取jar包内置文件或同目录下配置文件

    java读取jar包内置文件或同目录下配置文件 读取jar包同目录下文件 java程序在打成jar包后 xff0c jar内的文件就不再具备文件系统级别的路径 xff0c 因此要读取jar包同目录下的文件 xff0c 就需要特殊处理 这里使
  • MFC使用winpcap 抓包 pcap_compile使用

    使用Winpcap编写 xff1a 最近工作需要抓取傻瓜交换机的MAC xff0c 由于没有IP只能使用Winpcap抓包工具来实现 本人初学者 xff0c 大佬请绕行 a 先获取电脑的网卡信息 在SwithCheckMacDlg h文件中