Skip to content

Commit d21c05c

Browse files
authored
Add getter to fetch all IP addresses of a live device as IPAddress objects. (#1500)
1 parent e46bf12 commit d21c05c

File tree

3 files changed

+39
-0
lines changed

3 files changed

+39
-0
lines changed

Pcap++/header/PcapLiveDevice.h

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -291,9 +291,16 @@ namespace pcpp
291291

292292
/**
293293
* @return A vector containing all addresses defined for this interface, each in pcap_addr_t struct
294+
* @deprecated This method is deprecated and will be removed in future versions. Please use getIPAddresses() instead.
294295
*/
296+
PCPP_DEPRECATED("This method is deprecated and will be removed in future versions. Please use getIPAddresses() instead.")
295297
const std::vector<pcap_addr_t>& getAddresses() const { return m_Addresses; }
296298

299+
/**
300+
* @return A vector containing all IP addresses defined for this interface.
301+
*/
302+
std::vector<IPAddress> getIPAddresses() const;
303+
297304
/**
298305
* @return The MAC address for this interface
299306
*/

Pcap++/src/PcapLiveDevice.cpp

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1168,6 +1168,29 @@ void PcapLiveDevice::setDefaultGateway()
11681168
#endif
11691169
}
11701170

1171+
std::vector<IPAddress> PcapLiveDevice::getIPAddresses() const
1172+
{
1173+
std::vector<IPAddress> results;
1174+
for (const auto& address : m_Addresses)
1175+
{
1176+
in_addr* ipv4Addr = internal::try_sockaddr2in_addr(address.addr);
1177+
if (ipv4Addr != nullptr)
1178+
{
1179+
results.push_back(IPv4Address(ipv4Addr->s_addr));
1180+
continue;
1181+
}
1182+
1183+
in6_addr* ipv6Addr = internal::try_sockaddr2in6_addr(address.addr);
1184+
if (ipv6Addr != nullptr)
1185+
{
1186+
results.push_back(IPv6Address(ipv6Addr->s6_addr));
1187+
continue;
1188+
}
1189+
}
1190+
1191+
return results;
1192+
}
1193+
11711194
IPv4Address PcapLiveDevice::getIPv4Address() const
11721195
{
11731196
for(const auto& addrIter : m_Addresses)

Tests/Pcap++Test/Tests/LiveDeviceTests.cpp

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
#include "../Common/TestUtils.h"
1212
#include "../Common/PcapFileNamesDef.h"
1313
#include <array>
14+
#include <algorithm>
1415
#include <cstdio>
1516
#if defined(_WIN32)
1617
# include "PcapRemoteDevice.h"
@@ -296,6 +297,14 @@ PTF_TEST_CASE(TestPcapLiveDevice)
296297
PTF_ASSERT_NOT_NULL(liveDev);
297298
PTF_ASSERT_GREATER_THAN(liveDev->getMtu(), 0);
298299
PTF_ASSERT_TRUE(liveDev->open());
300+
301+
PTF_ASSERT_EQUAL(liveDev->getIPv4Address(), ipToSearch);
302+
{
303+
// Should probably be refactored as PTF_ASSERT_CONTAINS or similar.
304+
auto const ipAddresses = liveDev->getIPAddresses();
305+
PTF_ASSERT_TRUE(std::any_of(ipAddresses.begin(), ipAddresses.end(), [ipToSearch](pcpp::IPAddress const& addr) { return addr == ipToSearch; }));
306+
}
307+
299308
DeviceTeardown devTeardown(liveDev);
300309
int packetCount = 0;
301310
int numOfTimeStatsWereInvoked = 0;

0 commit comments

Comments
 (0)