我有几千个pcap文件,我试图解析作为研究项目的一部分。它们都被命名为xxx.xxx.xxx.xxx_yyy.yyy.yyy.yyy.pcap,其中第一个IP地址是我试图在我的C ++程序中用作变量的地址。
解析pcap文件本身不是问题。我将文件名作为指针传递给函数,只是不知道如何获取文件名的第一部分。
根据要求,这里有一些代码:
//program.cpp//
int main(int argc, char *argv[]){
char * inFile;
inFile = argv[1];
result = parsePkts(inFile);
return 0;
}
//functions.h//
int parsePkts(char *fn){
struct ip *ipHdr = NULL;
ipHdr = (struct ip *)(data + sizeof(struct ether_header));
if((ipHdr -> ip_dst.s_addr)) == xxx.xxx.xxx.xxx) {
do stuff
}
}
显然,该计划还有很多,但这是我需要抓住它的地方。感谢。
答案 0 :(得分:0)
如果你的输入是const char * as filename,你可以用几种方式拆分它。您写道,您需要将其拆分为某些部分(第一部分)。在你的情况下,我有一小部分用字符串来分割字符串' _'
void stringSplitBy(std::string str, const char *separator, std::vector<std::string> &results)
{
size_t found = str.find_first_of(separator);
while (found != std::string::npos) {
if (found > 0) {
results.push_back(str.substr(0, found));
}
str = str.substr(found + 1);
found = str.find_first_of(separator);
}
if (str.length() > 0) {
results.push_back(str);
}
}
以这种方式使用它:
const char* inputfname = "xxx.xxx.xxx.xxx_yyy.yyy.yyy.yyy.pcap";
std::string fname = std::string(inputfname);
std::vector<std::string> results;
stringSplitBy(fname, '_', results);
您可以打印结果:
std::vector<std::string>::iterator it = results.begin();
for (; it != results.end(); ++it)
{
std::cout<< (*it).c_str() << std::endl;
}