And I gave you the answer. They get your IP address because it's submitted to the database along with your post. I haven't seen the code, but there's a memory region that probably looks something like this:
USER_ID
POST_ID
IP_ADDRESS
POST_DATA
IMG_LINK
….
And then there's some code that submits it to the database.
The thing is, this same memory region is reused over and over. So if you have multiple threads, you could have Client A posting its IP_ADDRESS into that section while Client B is still filling up POST_DATA, IMG_LINK or something else preparing to submit to the database.
Client A has had its own IP_ADDRESS overwritten by Client B, and that is what gets submitted to the database. It's obviously wrong.
To fix it you create a lock variable that tells a thread: this memory region is currently in use, don't try to write until Client A is done and the data is submitted. Client B checks the lock variable, sees that Client A is still using it and tries again later.
Usually this kind of threading problem goes unnoticed because database submissions are so fast that transactions don't often run over one another. But when the server is bogged down, then you see this happen more frequently.
So no, no one's "stealing" your IP. The post is having the wrong IP recorded - the same way posts have the wrong image recorded.
Then when a mod comes in and sees the post with data from two clients written to it, they ban the IP associated with that post (which is the wrong one), and then the user who did nothing wrong is banned.
So either you have to place a lock around your memory region OR you can do what's called COW (Copy On Write) - you create a copy of a memory region and use that instead. No other threads (Clients) can access that memory region before it's written to the database.
Is that a sufficient explanation?