This forum uses some mod to always show ipv4? in most SMF forums the ip is shown in ipv6.
There isn't any modification installed to alter the IP address.
It might have something to do with the network my host provides or possibly because I haven't configured something properly.
Thanks for the report, I will look into it.
Yes, it's curious, because in all SMF forums my ip always shows the ipv6 version, but here it shows me the ipv4, which I prefer to see and I wanted to replicate it in my forum.
If you find the necessary setting please let me know.
Yes but I don't think it's a real IP address for you.
There is likely some script that generates it from your IPv6 address so it will always show as the same but it's not legit.
Your ISP has assigned you a IPv6 which may be dynamic & assigned when your modem/router powers up & connects to your ISP's network or it may be static & always the same from the day you signed up for your ISP service.
IPv4's ran out in 2019 where some ISP's have a pool of them that they use.
There is a PHP script that can convert IPv6 to IPv4 which will always be the same when using the same IPv6 digits but like I said, it's not really a legit IPv4 address. There is at least a 1 in 4,294,967,296 chance that it will be a duplicate of a legit IPv4 but even higher odds for your site because how many of those IP's are going to visit? I suppose it's not hugely important to be legit because of mainly dynamic use of them by ISP's so you can use a script to change it without any problem.
For example, you can use something like this:
Note: requires PHP 8.2+
if (filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_IPV6)) {
$ipv4 = hexdec(substr($ip, 0, 2)) . '.' . hexdec(substr($ip, 2, 2)) . '.' . hexdec(substr($ip, 5, 2)) . '.' . hexdec(substr($ip, 7, 2));
$ip = $ip == '::1' ? '127.0.0.1' : (inet_ntop(inet_pton($ip)) == '::1' ? '127.0.0.1' : (filter_var($ipv4, FILTER_VALIDATE_IP, FILTER_FLAG_IPV4) ? $ipv4 : $ip));
}
elseif (!filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_IPV4)) {
// invalid IP ~ do not allow login process
$ip = '';
}
if (!empty($ip) && !filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_GLOBAL_RANGE)) {
// invalid IP range ~ do not allow login process unless using loopback
$ip = filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_NO_RES_RANGE) ? '' : $ip;
}
Like I said, this is really a bogus IP but it will generate the same corresponding IPv4 address.
In which template should I register this code?
I usually prefer ipv4 because it is easier and more visible to recognize from the list of ip's I ban, just for practicality and convenience.
I don't think you should mess with SMF behavior & what's recorded in the database for IP's.
If it's just because you want it to display the IPv4 visually in your forum then perhaps just filter what's displayed.
Which part of the forum is displaying the IPv6 & you would rather see IPv4?
Is it just the who's online list?
yes, just the ip shown below the profile in the post area, for example this
(https://cdn.discordapp.com/attachments/1320218995516899439/1324236324768845854/Captura_de_pantalla_2025-01-02_a_las_05.41.22.png?ex=678c82ae&is=678b312e&hm=90c52155c1397791e0e7b98a0b04cdca9457a7ff46de1b5998c131d44abdabee&)
I just realized that I never uploaded the image, here it is
(https://i.imgur.com/jI8b1re.png)
Install the attached mod & set it to JavaScript mode.
If you find that mode to work then leave it set but if it fails then try PHP mode.
Navigate to this mod's settings from:
Admin -> Modification Settings -> Force IPv4 View
ok, I had no problems with the installation.
However when I select javascript I get this error:
(https://i.imgur.com/PC31okN.png)
When I select php I get this error:
(https://i.imgur.com/VIe0K9x.png)
In any case it does not allow me to see the post information.
I used a global constant that only exists in PHP 8.2.27 or newer.
The attachment has a fix for your lower version of PHP.
Also note my reason for the PHP vs. JavaScript option...
I wanted to make the mod all hooks, negating the parsing of any SMF template files.
Due to the way SMF stores the IP in the $context array, the PHP option for this mod will render the IP tracking link invalid.
This can be dealt with using a single file edit to theme file(s) if necessary.
The JavaScript option will only change what is visible & will not effect the IP tracking link.
However, I can't be certain this will work for all themes due to the possible use of unique CSS classes (DOM identifiers/manipulation).
The installation works perfectly.
Yes, I think the javascript version is the best, because it is an aesthetic problem, I think it is good that internally the tracking works with the original data.
Visually now you can see the IP with IPV4 format, but I think there is an error with the conversion, because it shows me different data. I leave evidence:
2806:268:488:853:297d:d16:20de:feb(https://imgur.com/V7FOFZB.png)
This is the generated IP
40.6.38.8(https://imgur.com/1mWTe9V.png)
About the last thing you mention, I checked the browser inspector shows me this:
uBOL: Generic cosmetic filtering stopped because no more DOM changes css-generic.js:231
I understand that it is just an output generated by the code and does not mean any error, I wanted to mention it anyway.
Thank you very much, you are the best
Why are you bothering to run VPN tests on the bogus generated IPv4 addresses?
They're just what is visible for Admins on your forum & are not recorded in the database.
Also your regular users usually can't view any IP's except their own & I doubt they're going to run a check on what's visible.
To be honest, the IPv6 address likely doesn't bother people as this seems to be a pet peeve of yours.
Quote from: Duban Black on March 11, 2025, 08:49:52 PMuBOL: Generic cosmetic filtering stopped because no more DOM changes css-generic.js:231
This appears to be a misdemeanor message from an add-on that you've loaded into your browser that you can ignore.
In my forum it is forbidden to use VPN and my moderators verify the IPs so that they do not create accounts pretending to be other people.
What I needed was not to create a fake ipv4, but that the ipv6 is transformed into ipv4, but that the IP information itself is the same, I need an equivalent.
So does that mod work for you with its latest update?
I've attached version 1.2 which does do a single file edit to any template containing the file: "Display.template.php".
I didn't want to go that route because of the file parsing but using PHP mode it doesn't use any DOM manipulation.
If your theme is similar to the default SMF theme then the file parsing will pass.
The mod installed without problem, in both javascript and php versions it shows an IP in ipv4 format, but it is not the correct equivalent of ipv6, it shows another country, another internet operator, another ISP, etc.
I told you from the beginning that it's a bogus IP address.
There is no direct equivalent for all IPv6 to IPv4.
So what are you asking for now?
You want it to use a free API for a geo location query & then output a bogus IPv4 from that same geo location?
Why is this so important to you?
I found a free up to date PHP library class for IP manipulation which we can try in this modification.
This is not fully tested & I have no idea if it converts the IP's to something close to the same location.
It would have to have currently known IP block locations stored in a file or accessed via an API (likely using Json objects).
I doubt it's any better than what was being used in v1.2 but you can try it out.
Failing that, I would have to find & put together code likely using free API's to get IP data which I don't have time to do at the moment.
My other projects are a priority & someone else has already been put on hold while I looked at this.
I do like a challenge but I just don't have the time to look into this any further at the moment.
Either way it does change the IP adequately, albeit apparently not to your standards due to geo location.
Perhaps the library I found will work for you, give it a try and let me know.
Quote from: Duban Black on March 12, 2025, 12:49:58 PMWhat I needed was not to create a fake ipv4, but that the ipv6 is transformed into ipv4, but that the IP information itself is the same, I need an equivalent.
I've tried to explain this to you a few times.
What you ask for is not entirely possible.
ISP's ran out of IPv4 addresses back on November 25, 2019.
Some still have blocks of them from the past but after that date all that's available is IPv6 addresses.
IPv4 ( 32 bit) ~ total number of possible IP's: 4,294,967,296 (588 million reserved)
IPv6 (128 bit) ~ total number of possible IP's: 340,282,366,920,938,000,000,000,000,000,000,000,000
So if I take a IPv6 address & try to convert it to IPv4, I am likely using an existing IPv4 address.
The best that can be done is to have a database store of known IP blocks and attempt to mock one from the same geo location.
At the moment I have no idea if someone or an entity has such a database store of freely available IP information such is required in this scenario via a quick API that can be tapped.
I don't see why one would bother?!
Just deal with the IPv6 addresses.. it's now the norm and the way it has to be.
Yes, I understand, I consulted because in this forum the ipv4 and ipv6 show the same information, not a false one, I understand that you did not know if it was something that your hosting did and not a mod that you have installed here. But I wanted to have the same, just that. For my forum it is important not only because the ipv4 field is visually easier to manipulate and recognize, but because we have several rules associated with the IP.
But if it is not possible to replicate the same logic that your hosting uses, that's fine, we leave it like that.
In other forums I've been to like forumotion, it also shows only ipv4, all ip addresses are transformed to that format.
The version 1.3 in javascript API displays ip in ipv6 format
I suspect they tap into an API, have a database store or files that contain up to date global IP information.
There are paid API's that allow access to such information which might be the case.
I've read that we can map a very limited amount of IPv6 to IPv4 but I don't know the accuracy of that mapping calculation.
The PHP class I introduced in v1.3 of this mod may use the proper mapping but I am not certain.
To make it work, one would need something that checks the geo location of the IPv6, attempt to map it to IPv4 & compare the geo location of the mapped IPv4 vs the original IPv6 geo location.
If the geo location fails to match or the IPv6 mapping fails altogether then it needs to pick a random (or somehow calculated mapping) IPv4 from a pool of IP's that correspond to that geo location.
Does PHP mode in the mod correspond to a closer geo location?
Does your IP that you see on this forum correspond to the correct geo location?
Quote from: Chen Zhen on March 13, 2025, 12:17:50 PMDoes PHP mode in the mod correspond to a closer geo location?
In version v1.3 in all modes (javascript, php, javascript api) shows ipv6
Quote from: Chen Zhen on March 13, 2025, 12:17:50 PMDoes your IP that you see on this forum correspond to the correct geo location?
Yes, in this forum the exact equivalent of ipv6 to ipv4 is shown.
I've attached an update that fixes the converted IP.
The IP-Lib class will map an IPv6 address to a corresponding IPv4 address if it can be mapped.
I made it so that if it can't be mapped then it returns a bogus IPv4 value.
So for example, in one of your images in this thread you included an IPv6 that has a geo location of somewhere in Mexico.
That specific IPv6 can't be mapped to a corresponding IPv4 address.
You can test it for yourself here: https://dnschecker.org/ipv6-to-ipv4.php
Quote from: Chen Zhen on March 13, 2025, 12:17:50 PMTo make it work, one would need something that checks the geo location of the IPv6, attempt to map it to IPv4 & compare the geo location of the mapped IPv4 vs the original IPv6 geo location.
If the geo location fails to match or the IPv6 mapping fails altogether then it needs to pick a random (or somehow calculated mapping) IPv4 from a pool of IP's that correspond to that geo location.
Someone would have to develop what I previously stated but for now this mod will return an IPv4 even if the orginal IPv6 can't be mapped but syncing the geo location is a crap shoot and highly unlikely.
I have tested the new version and it only transforms in the PHP version, in javascript and javascript api it shows the same.
But it happens because some ipv6 cannot be mapped.
I think it's ok if we leave it here, I really appreciate the effort and help you gave me with this.