void IPTest::test_equals(const IP &ip1, const IP &ip2) { EXPECT_EQ(ip1.dst_addr(), ip2.dst_addr()); EXPECT_EQ(ip1.src_addr(), ip2.src_addr()); EXPECT_EQ(ip1.id(), ip2.id()); EXPECT_EQ(ip1.frag_off(), ip2.frag_off()); EXPECT_EQ(ip1.tos(), ip2.tos()); EXPECT_EQ(ip1.ttl(), ip2.ttl()); EXPECT_EQ(ip1.version(), ip2.version()); EXPECT_EQ((bool)ip1.inner_pdu(), (bool)ip2.inner_pdu()); }
TEST_F(IPTest, DefaultConstructor) { IP ip; EXPECT_EQ(ip.dst_addr(), "0.0.0.0"); EXPECT_EQ(ip.src_addr(), "0.0.0.0"); EXPECT_EQ(ip.version(), 4); EXPECT_EQ(ip.id(), 1); EXPECT_EQ(ip.pdu_type(), PDU::IP); }
bool sniff_callback(PDU &pdu) { const IP &ip = pdu.rfind_pdu<IP>(); ttl_map::const_iterator iter; // Fetch the IP PDU attached to the ICMP response const IP inner_ip = pdu.rfind_pdu<RawPDU>().to<IP>(); // Critical section { std::lock_guard<std::mutex> _(lock); iter = ttls.find(inner_ip.id()); } // It's an actual response if(iter != ttls.end()) { // Store it results[inner_ip.id()] = ip.src_addr(); } return running; }
void send_packets(PacketSender &sender) { // ICMPs are icmp-requests by default IP ip = IP(addr, iface.addresses().ip_addr) / ICMP(); // We'll find at most 10 hops. for(auto i = 1; i <= 10; ++i) { // Set this "unique" id ip.id(i); // Set the time-to-live option ip.ttl(i); // Critical section { std::lock_guard<std::mutex> _(lock); ttls[i] = i; } sender.send(ip); // Give him a little time std::this_thread::sleep_for(std::chrono::milliseconds(100)); } running = false; sender.send(ip); }
TEST_F(IPTest, ID) { IP ip; ip.id(0x7f1a); EXPECT_EQ(ip.id(), 0x7f1a); }