1
0
mirror of https://github.com/mfontanini/libtins synced 2026-01-27 04:11:35 +01:00

Done minor modifications over Sniffer.

This commit is contained in:
Matias Fontanini
2011-08-19 20:13:08 -03:00
parent 83476fd195
commit 31358eca46
2 changed files with 31 additions and 20 deletions

View File

@@ -60,13 +60,9 @@ bool Tins::Sniffer::compile_set_filter(const string &filter, bpf_program &prog)
return (pcap_compile(handle, &prog, filter.c_str(), 0, ip) != -1 && pcap_setfilter(handle, &prog) != -1);
}
Tins::PDU *Tins::Sniffer::next_pdu(const string &filter) {
if(filter.size()) {
if(actual_filter.bf_insns)
pcap_freecode(&actual_filter);
if(!compile_set_filter(filter, actual_filter))
return 0;
}
Tins::PDU *Tins::Sniffer::next_packet(const string &filter) {
if(filter.size())
set_filter(filter);
pcap_pkthdr header;
PDU *ret = 0;
while(!ret) {
@@ -86,16 +82,18 @@ void Tins::Sniffer::stop_sniff() {
}
void Tins::Sniffer::sniff_loop(AbstractSnifferHandler *cback_handler, const string &filter, uint32_t max_packets) {
if(filter.size()) {
if(actual_filter.bf_insns)
pcap_freecode(&actual_filter);
if(!compile_set_filter(filter, actual_filter))
return;
}
if(filter.size())
set_filter(filter);
LoopData data(handle, cback_handler);
pcap_loop(handle, max_packets, Sniffer::callback_handler, (u_char*)&data);
}
bool Tins::Sniffer::set_filter(const std::string &filter) {
if(actual_filter.bf_insns)
pcap_freecode(&actual_filter);
return compile_set_filter(filter, actual_filter);
}
// Static
void Tins::Sniffer::callback_handler(u_char *args, const struct pcap_pkthdr *header, const u_char *packet) {
try {