libpcap-programming:start
فهرست مندرجات
برنامهنویسی libpcap
پیشنیازها
apt install libpcap-dev
کامپایل
gcc <filename> -lpcap
انتخاب دیوایس شبکه
دستی - hard-code
#include <stdio.h> #include <pcap.h> int main(int argc, char *argv[]) { char *device = "enp3s0"; printf("Device: %s\n", device); return(0); }
دستی - پارامتر خط فرمان
#include <stdio.h> #include <pcap.h> int main(int argc, char *argv[]) { char *dev = argv[1]; printf("Device: %s\n", dev); return(0); }
اتوماتیک - با استفاده از pcap_findalldevs
// man pcap_findalldevs // man sockaddr // man inet_ntop // gcc find_device.c -lpcap #include <stdio.h> #include <stdlib.h> #include <pcap/pcap.h> #include <netinet/in.h> #include <sys/socket.h> #include <arpa/inet.h> #include <string.h> #include <stdint.h> void showbin32(uint32_t num) { struct byte { unsigned char a:1; unsigned char b:1; unsigned char c:1; unsigned char d:1; unsigned char e:1; unsigned char f:1; unsigned char g:1; unsigned char h:1; }; union { uint32_t n; struct byte c[4]; } pack; pack.n = num; for (int i = 3; i >= 0; i--) { printf("%u%u%u%u%u%u%u%u ", pack.c[i].h, pack.c[i].g, pack.c[i].f, pack.c[i].e, pack.c[i].d, pack.c[i].c, pack.c[i].b, pack.c[i].a); } printf("\n"); } void showbinstr(char *s, size_t len) { struct byte { unsigned char a:1; unsigned char b:1; unsigned char c:1; unsigned char d:1; unsigned char e:1; unsigned char f:1; unsigned char g:1; unsigned char h:1; }; union { unsigned char n; struct byte c; } pack; for (int i = 0; i < len; i++) { pack.n = s[i]; printf("%u%u%u%u%u%u%u%u ", pack.c.h, pack.c.g, pack.c.f, pack.c.e, pack.c.d, pack.c.c, pack.c.b, pack.c.a); } printf("\n"); } int main() { char errbuf[PCAP_ERRBUF_SIZE]; pcap_if_t *alldevsp; if ((pcap_findalldevs(&alldevsp, errbuf)) == PCAP_ERROR) { printf("Error (pcap_findalldevs): %s\n", errbuf); exit(EXIT_FAILURE); } pcap_if_t *devp = alldevsp; while (devp != NULL) { printf("----------------------------------------\n"); printf("Name: %s\n", devp->name); printf("Description: %s\n", devp->description); printf("Flags: "); if (devp->flags & PCAP_IF_UP) printf("UP "); else printf("Down "); if (devp->flags & PCAP_IF_RUNNING) printf("Running "); if (devp->flags & PCAP_IF_WIRELESS) printf("Wireless "); if (devp->flags & PCAP_IF_LOOPBACK) printf("Loopback "); if ((devp->flags & PCAP_IF_CONNECTION_STATUS) == PCAP_IF_CONNECTION_STATUS_CONNECTED) printf("Connected\n"); if ((devp->flags & PCAP_IF_CONNECTION_STATUS) == PCAP_IF_CONNECTION_STATUS_DISCONNECTED) printf("Disconnected\n"); if ((devp->flags & PCAP_IF_CONNECTION_STATUS) == PCAP_IF_CONNECTION_STATUS_UNKNOWN) printf("Unknown\n"); if ((devp->flags & PCAP_IF_CONNECTION_STATUS) == PCAP_IF_CONNECTION_STATUS_NOT_APPLICABLE) printf("Not-Applicable\n"); printf("\n"); pcap_addr_t *addrp = devp->addresses; while (addrp != NULL) { if(addrp->addr->sa_family == AF_INET) { struct sockaddr_in *v4addrp; v4addrp = (struct sockaddr_in *) addrp->addr; struct in_addr *sin_addrp; sin_addrp = &(v4addrp->sin_addr); char ipv4[INET_ADDRSTRLEN]; inet_ntop(AF_INET, sin_addrp, ipv4, INET_ADDRSTRLEN); printf("IPv4 = %s\n", ipv4); if (addrp->netmask != NULL) { struct in_addr *netmaskp; netmaskp = &(((struct sockaddr_in *) addrp->netmask)->sin_addr); char netmask[INET_ADDRSTRLEN]; inet_ntop(AF_INET, netmaskp, netmask, INET_ADDRSTRLEN); printf("Netmask = %s\n", netmask); uint32_t n = htonl(*(uint32_t *)netmaskp); int prefix = 0; while (n > 0) { showbin32(n); n = n << 1; prefix++; } printf("Prefix: /%d\n", prefix); } } if(addrp->addr->sa_family == AF_INET6) { struct sockaddr_in6 *v6addrp; v6addrp = (struct sockaddr_in6 *) addrp->addr; struct in6_addr *sin6_addrp; sin6_addrp = &(v6addrp->sin6_addr); char ipv6[INET6_ADDRSTRLEN]; inet_ntop(AF_INET6, sin6_addrp, ipv6, INET6_ADDRSTRLEN); printf("IPv6 = %s\n", ipv6); if (addrp->netmask != NULL) { struct in6_addr *netmaskp; netmaskp = &(((struct sockaddr_in6 *) addrp->netmask)->sin6_addr); char netmask[INET6_ADDRSTRLEN]; inet_ntop(AF_INET6, netmaskp, netmask, INET6_ADDRSTRLEN); printf("Netmask = %s\n", netmask); showbinstr((char *)netmaskp, 16); int prefix = 0; for (int i = 0; i < 16; i++) { unsigned char c = *((char *)netmaskp + i); if (c == 0) break; while (c > 0) { c = c << 1; prefix++; } } printf("Prefix: /%d\n", prefix); } } addrp = addrp->next; } devp = devp->next; } pcap_freealldevs(alldevsp); return 0; }
---------------------------------------- Name: enp4s0 Description: (null) Flags: UP Running Connected IPv4 = 192.168.1.2 Netmask = 255.255.255.0 11111111 11111111 11111111 00000000 11111111 11111111 11111110 00000000 11111111 11111111 11111100 00000000 11111111 11111111 11111000 00000000 11111111 11111111 11110000 00000000 11111111 11111111 11100000 00000000 11111111 11111111 11000000 00000000 11111111 11111111 10000000 00000000 11111111 11111111 00000000 00000000 11111111 11111110 00000000 00000000 11111111 11111100 00000000 00000000 11111111 11111000 00000000 00000000 11111111 11110000 00000000 00000000 11111111 11100000 00000000 00000000 11111111 11000000 00000000 00000000 11111111 10000000 00000000 00000000 11111111 00000000 00000000 00000000 11111110 00000000 00000000 00000000 11111100 00000000 00000000 00000000 11111000 00000000 00000000 00000000 11110000 00000000 00000000 00000000 11100000 00000000 00000000 00000000 11000000 00000000 00000000 00000000 10000000 00000000 00000000 00000000 Prefix: /24 IPv6 = fe80::290:27ff:fe75:22b4 Netmask = ffff:ffff:ffff:ffff:: 11111111 11111111 11111111 11111111 11111111 11111111 11111111 11111111 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 Prefix: /64 ---------------------------------------- Name: enp3s0 Description: (null) Flags: UP Running Connected IPv4 = 172.16.20.1 Netmask = 255.255.255.0 11111111 11111111 11111111 00000000 11111111 11111111 11111110 00000000 11111111 11111111 11111100 00000000 11111111 11111111 11111000 00000000 11111111 11111111 11110000 00000000 11111111 11111111 11100000 00000000 11111111 11111111 11000000 00000000 11111111 11111111 10000000 00000000 11111111 11111111 00000000 00000000 11111111 11111110 00000000 00000000 11111111 11111100 00000000 00000000 11111111 11111000 00000000 00000000 11111111 11110000 00000000 00000000 11111111 11100000 00000000 00000000 11111111 11000000 00000000 00000000 11111111 10000000 00000000 00000000 11111111 00000000 00000000 00000000 11111110 00000000 00000000 00000000 11111100 00000000 00000000 00000000 11111000 00000000 00000000 00000000 11110000 00000000 00000000 00000000 11100000 00000000 00000000 00000000 11000000 00000000 00000000 00000000 10000000 00000000 00000000 00000000 Prefix: /24 IPv4 = 1.2.3.1 Netmask = 255.255.255.252 11111111 11111111 11111111 11111100 11111111 11111111 11111111 11111000 11111111 11111111 11111111 11110000 11111111 11111111 11111111 11100000 11111111 11111111 11111111 11000000 11111111 11111111 11111111 10000000 11111111 11111111 11111111 00000000 11111111 11111111 11111110 00000000 11111111 11111111 11111100 00000000 11111111 11111111 11111000 00000000 11111111 11111111 11110000 00000000 11111111 11111111 11100000 00000000 11111111 11111111 11000000 00000000 11111111 11111111 10000000 00000000 11111111 11111111 00000000 00000000 11111111 11111110 00000000 00000000 11111111 11111100 00000000 00000000 11111111 11111000 00000000 00000000 11111111 11110000 00000000 00000000 11111111 11100000 00000000 00000000 11111111 11000000 00000000 00000000 11111111 10000000 00000000 00000000 11111111 00000000 00000000 00000000 11111110 00000000 00000000 00000000 11111100 00000000 00000000 00000000 11111000 00000000 00000000 00000000 11110000 00000000 00000000 00000000 11100000 00000000 00000000 00000000 11000000 00000000 00000000 00000000 10000000 00000000 00000000 00000000 Prefix: /30 IPv6 = fe80::52e5:49ff:fe8b:599 Netmask = ffff:ffff:ffff:ffff:: 11111111 11111111 11111111 11111111 11111111 11111111 11111111 11111111 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 Prefix: /64 ---------------------------------------- Name: ppp0 Description: (null) Flags: UP Running Not-Applicable IPv4 = 84.241.46.220 Netmask = 255.255.255.255 11111111 11111111 11111111 11111111 11111111 11111111 11111111 11111110 11111111 11111111 11111111 11111100 11111111 11111111 11111111 11111000 11111111 11111111 11111111 11110000 11111111 11111111 11111111 11100000 11111111 11111111 11111111 11000000 11111111 11111111 11111111 10000000 11111111 11111111 11111111 00000000 11111111 11111111 11111110 00000000 11111111 11111111 11111100 00000000 11111111 11111111 11111000 00000000 11111111 11111111 11110000 00000000 11111111 11111111 11100000 00000000 11111111 11111111 11000000 00000000 11111111 11111111 10000000 00000000 11111111 11111111 00000000 00000000 11111111 11111110 00000000 00000000 11111111 11111100 00000000 00000000 11111111 11111000 00000000 00000000 11111111 11110000 00000000 00000000 11111111 11100000 00000000 00000000 11111111 11000000 00000000 00000000 11111111 10000000 00000000 00000000 11111111 00000000 00000000 00000000 11111110 00000000 00000000 00000000 11111100 00000000 00000000 00000000 11111000 00000000 00000000 00000000 11110000 00000000 00000000 00000000 11100000 00000000 00000000 00000000 11000000 00000000 00000000 00000000 10000000 00000000 00000000 00000000 Prefix: /32 ---------------------------------------- Name: tun1 Description: (null) Flags: UP Running Connected IPv4 = 10.1.1.10 Netmask = 255.255.255.252 11111111 11111111 11111111 11111100 11111111 11111111 11111111 11111000 11111111 11111111 11111111 11110000 11111111 11111111 11111111 11100000 11111111 11111111 11111111 11000000 11111111 11111111 11111111 10000000 11111111 11111111 11111111 00000000 11111111 11111111 11111110 00000000 11111111 11111111 11111100 00000000 11111111 11111111 11111000 00000000 11111111 11111111 11110000 00000000 11111111 11111111 11100000 00000000 11111111 11111111 11000000 00000000 11111111 11111111 10000000 00000000 11111111 11111111 00000000 00000000 11111111 11111110 00000000 00000000 11111111 11111100 00000000 00000000 11111111 11111000 00000000 00000000 11111111 11110000 00000000 00000000 11111111 11100000 00000000 00000000 11111111 11000000 00000000 00000000 11111111 10000000 00000000 00000000 11111111 00000000 00000000 00000000 11111110 00000000 00000000 00000000 11111100 00000000 00000000 00000000 11111000 00000000 00000000 00000000 11110000 00000000 00000000 00000000 11100000 00000000 00000000 00000000 11000000 00000000 00000000 00000000 10000000 00000000 00000000 00000000 Prefix: /30 IPv6 = fe80::3422:94a9:3011:7e6c Netmask = ffff:ffff:ffff:ffff:: 11111111 11111111 11111111 11111111 11111111 11111111 11111111 11111111 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 Prefix: /64 ---------------------------------------- Name: any Description: Pseudo-device that captures on all interfaces Flags: UP Running Not-Applicable ---------------------------------------- Name: lo Description: (null) Flags: UP Running Loopback Not-Applicable IPv4 = 127.0.0.1 Netmask = 255.0.0.0 11111111 00000000 00000000 00000000 11111110 00000000 00000000 00000000 11111100 00000000 00000000 00000000 11111000 00000000 00000000 00000000 11110000 00000000 00000000 00000000 11100000 00000000 00000000 00000000 11000000 00000000 00000000 00000000 10000000 00000000 00000000 00000000 Prefix: /8 IPv6 = ::1 Netmask = ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff 11111111 11111111 11111111 11111111 11111111 11111111 11111111 11111111 11111111 11111111 11111111 11111111 11111111 11111111 11111111 11111111 Prefix: /128 ---------------------------------------- Name: bluetooth-monitor Description: Bluetooth Linux Monitor Flags: Down Wireless Not-Applicable ---------------------------------------- Name: nflog Description: Linux netfilter log (NFLOG) interface Flags: Down Not-Applicable ---------------------------------------- Name: nfqueue Description: Linux netfilter queue (NFQUEUE) interface Flags: Down Not-Applicable ---------------------------------------- Name: dbus-system Description: D-Bus system bus Flags: Down Not-Applicable ---------------------------------------- Name: dbus-session Description: D-Bus session bus Flags: Down Not-Applicable
libpcap-programming/start.txt · آخرین ویرایش: 2024/06/19 00:07 توسط pejman
