提交 311faa37 编写于 作者: 丁劲犇's avatar 丁劲犇 😸

减少PCAP设备枚举时的文字长度,同时在出错后可继续工作。

上级 702804c0
......@@ -28,18 +28,24 @@ namespace PCAPIO{
{
std::string res;
char buf[1024];
int left_start = 0, right_end = sizeof(sockaddr::sa_data) - 1;
while (left_start + 3 < right_end && v[left_start]==0)
++left_start;
while (left_start + 3< right_end && v[right_end]==0)
--right_end;
res += "HEX(";
for (unsigned char i =0; i<sizeof(sockaddr::sa_data);++i)
for (unsigned char i =left_start; i<=right_end;++i)
{
if (i) res += ":";
if (i-left_start) res += ":";
snprintf(buf,1024,"%02X", (unsigned int)v[i]);
res += buf;
}
res += ")";
res += "DEC(";
for (unsigned char i =0; i<sizeof(sockaddr::sa_data);++i)
for (unsigned char i =left_start; i<=right_end;++i)
{
if (i) res += ":";
if (i-left_start) res += ":";
snprintf(buf,1024,"%u", (unsigned int)v[i] );
res += buf;
}
......@@ -106,7 +112,10 @@ void pcap_sink::run()
{
if (m_bStop)
return;
bool bQuit = false;
using namespace TASKBUS;
while (false==m_bStop)
{
pcap_t *handle = NULL;
char errbuf[PCAP_ERRBUF_SIZE];
handle = pcap_open_live(m_device.c_str(), 65535, 1, 10, errbuf);
......@@ -116,7 +125,6 @@ void pcap_sink::run()
emit sig_message(err);
return ;
}
bool bQuit = false;
m_tx = 0;
while (false==m_bStop)
{
......@@ -142,12 +150,20 @@ void pcap_sink::run()
}
else if (header.subject_id==m_nSubject)
{
pcap_sendpacket(handle,packagedta.data(),packagedta.size());
if (PCAP_ERROR ==pcap_sendpacket(handle,packagedta.data(),packagedta.size()))
{
fprintf(stderr,pcap_geterr(handle));
fprintf(stderr,"\n");
fflush(stderr);
break;
}
++m_tx;
}
}
}
pcap_close(handle);
}
emit sig_message("Stopped");
if (bQuit)
emit quit_app();
......
......@@ -4,10 +4,10 @@
#include "tb_interface.h"
namespace PCAPIO{
std::string ifaddresses(pcap_if_t *d);
std::string ifaddresses(pcap_if_t *d);
std::string pcapio_interfaces(std::map<std::string,std::string> & devmap)
{
std::string pcapio_interfaces(std::map<std::string,std::string> & devmap)
{
std::string res;
pcap_if_t *alldevs;
char errbuf[PCAP_ERRBUF_SIZE];
......@@ -23,33 +23,39 @@ namespace PCAPIO{
pcap_freealldevs(alldevs);
return res;
}
std::string address_print(unsigned char * v)
{
}
std::string address_print(unsigned char * v)
{
std::string res;
char buf[1024];
int left_start = 0, right_end = sizeof(sockaddr::sa_data) - 1;
while (left_start + 3 < right_end && v[left_start]==0)
++left_start;
while (left_start + 3< right_end && v[right_end]==0)
--right_end;
res += "HEX(";
for (unsigned char i =0; i<sizeof(sockaddr::sa_data);++i)
for (unsigned char i =left_start; i<=right_end;++i)
{
if (i) res += ":";
if (i-left_start) res += ":";
snprintf(buf,1024,"%02X", (unsigned int)v[i]);
res += buf;
}
res += ")";
res += "DEC(";
for (unsigned char i =0; i<sizeof(sockaddr::sa_data);++i)
for (unsigned char i =left_start; i<=right_end;++i)
{
if (i) res += ":";
if (i-left_start) res += ":";
snprintf(buf,1024,"%u", (unsigned int)v[i] );
res += buf;
}
res += ")";
return res;
}
/* Print all the available information on the given interface */
std::string ifaddresses(pcap_if_t *d)
{
}
/* Print all the available information on the given interface */
std::string ifaddresses(pcap_if_t *d)
{
char buf[1024];
pcap_addr_t *a;
std::string res ;
......@@ -76,7 +82,7 @@ namespace PCAPIO{
}
}
return res;
}
}
}
pcap_source::pcap_source (QObject * parent)
......@@ -106,6 +112,8 @@ void pcap_source::run()
{
if (m_bStop)
return;
while (!m_bStop)
{
pcap_t *handle = NULL;
char errbuf[PCAP_ERRBUF_SIZE];
handle = pcap_open_live(m_device.c_str(), 65535, 1, 10, errbuf);
......@@ -148,7 +156,16 @@ void pcap_source::run()
TASKBUS::push_subject(m_nSubject,m_nInstance,
header.len,(unsigned char *)packet);
}
else
{
fprintf(stderr,pcap_geterr(handle));
fprintf(stderr,"\n");
fflush(stderr);
break;
}
}
pcap_close(handle);
}
emit sig_message("Cap Stopped");
}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册