Introduction
Introduction Statistics Contact Development Disclaimer Help
slstatus-leakedip-20230105-c919def.diff - sites - public wiki contents of suckl…
git clone git://git.suckless.org/sites
Log
Files
Refs
---
slstatus-leakedip-20230105-c919def.diff (3664B)
---
1 From 82914c53f777c3d69bb593a0108c6326f61a6d86 Mon Sep 17 00:00:00 2001
2 From: Matvey <[email protected]>
3 Date: Thu, 5 Jan 2023 03:34:23 +0300
4 Subject: [PATCH] added leaked_ip function - ip as seen by internet
5
6 ---
7 components/ip.c | 80 +++++++++++++++++++++++++++++++++++++++++++++++--
8 config.def.h | 1 +
9 slstatus.h | 1 +
10 3 files changed, 80 insertions(+), 2 deletions(-)
11
12 diff --git a/components/ip.c b/components/ip.c
13 index 9476549..bed3003 100644
14 --- a/components/ip.c
15 +++ b/components/ip.c
16 @@ -1,4 +1,6 @@
17 /* See LICENSE file for copyright and license details. */
18 +#include <errno.h>
19 +#include <unistd.h>
20 #include <ifaddrs.h>
21 #include <netdb.h>
22 #include <stdio.h>
23 @@ -27,9 +29,9 @@ ip(const char *interface, unsigned short sa_family)
24 }
25
26 for (ifa = ifaddr; ifa != NULL; ifa = ifa->ifa_next) {
27 - if (!ifa->ifa_addr)
28 + if (!ifa->ifa_addr) {
29 continue;
30 -
31 + }
32 s = getnameinfo(ifa->ifa_addr, sizeof(struct sockaddr_i…
33 host, NI_MAXHOST, NULL, 0, NI_NUMERICHO…
34 if (!strcmp(ifa->ifa_name, interface) &&
35 @@ -59,3 +61,77 @@ ipv6(const char *interface)
36 {
37 return ip(interface, AF_INET6);
38 }
39 +
40 +const char *
41 +leaked_ip(void)
42 +{
43 + static const char *check_domain = "ip-api.com";
44 + static const char *check_request =
45 + "GET /line/?fields=query,country HTTP/1.1\r\n"
46 + "Host: ip-api.com\r\n\r\n";
47 + static const char *bad_addr = "X.X.X.X(Unavailable)";
48 +
49 + struct addrinfo *ai;
50 + int remote_fd;
51 + char *p;
52 + int s, n;
53 + int gai_errno;
54 +
55 + if ((gai_errno = getaddrinfo(check_domain, "http", NULL, &ai)))
56 + {
57 + warn("Can't resolve domain %s: %s", check_domain, gai_s…
58 + return bad_addr;
59 + }
60 + if ((remote_fd = socket(ai->ai_family, ai->ai_socktype, 0)) == …
61 + {
62 + freeaddrinfo(ai);
63 + warn("socket:");
64 + return bad_addr;
65 + }
66 +
67 + if (connect(remote_fd, ai->ai_addr, ai->ai_addrlen) == -1)
68 + {
69 + freeaddrinfo(ai);
70 + close(remote_fd);
71 + warn("connect:", check_domain);
72 + return bad_addr;
73 + }
74 + freeaddrinfo(ai);
75 +
76 + // send request
77 + n = strlen(check_request);
78 + p = (char *) check_request;
79 + while (n)
80 + {
81 + s = write(remote_fd, p, n);
82 +
83 + if (s == -1)
84 + {
85 + if (errno == EINTR)
86 + continue;
87 + close(remote_fd);
88 + warn("write:");
89 + return bad_addr;
90 + }
91 + n -= s;
92 + p += s;
93 + }
94 +
95 + p = buf;
96 + n = sizeof(buf);
97 + s = read(remote_fd, p, n);
98 + close(remote_fd);
99 + p = strstr(buf, "\r\n\r\n");
100 + if (!p)
101 + {
102 + warn("Can't resolve %s: Bad response from server", chec…
103 + return bad_addr;
104 + }
105 + p += 4;
106 + sscanf(p, "%*s%s", buf);
107 + strcat(buf, "(");
108 + sscanf(p, "%s", buf+strlen(buf));
109 + strcat(buf, ")");
110 +
111 + return buf;
112 +}
113 diff --git a/config.def.h b/config.def.h
114 index d805331..75c282b 100644
115 --- a/config.def.h
116 +++ b/config.def.h
117 @@ -31,6 +31,7 @@ static const char unknown_str[] = "n/a";
118 * hostname hostname NULL
119 * ipv4 IPv4 address interface name (…
120 * ipv6 IPv6 address interface name (…
121 + * leaked_ip IP address leaked to Internet NULL
122 * kernel_release `uname -r` NULL
123 * keyboard_indicators caps/num lock indicators format string (c…
124 * see keyboard_ind…
125 diff --git a/slstatus.h b/slstatus.h
126 index 8ef5874..6f67ccd 100644
127 --- a/slstatus.h
128 +++ b/slstatus.h
129 @@ -30,6 +30,7 @@ const char *hostname(const char *unused);
130 /* ip */
131 const char *ipv4(const char *interface);
132 const char *ipv6(const char *interface);
133 +const char *leaked_ip(void);
134
135 /* kernel_release */
136 const char *kernel_release(const char *unused);
137 --
138 2.35.1
139
You are viewing proxied material from suckless.org. The copyright of proxied material belongs to its original authors. Any comments or complaints in relation to proxied material should be directed to the original authors of the content concerned. Please see the disclaimer for more details.