Can a smart contract record IP address of the one's using it? I mean, is it possible to implement on Solidity?
No. Smart Contracts cannot record IP address of the sender.
Transactions being sent to the Ethereum network are communicated in a peer to peer form making it technically very difficult if not impossible to identify a node from which a transaction originated.
Yes it's possible to implement. Let the contract have a variable for IP address and let all the functions have an additional parameter for receiving IP address. When called from a program/dapp, the program can send the IP address of the system and the function updates the variable.
Yes and no, No if you think that the smart contract can directly read and recors an ip (sender, miner, etc..), as you know the smart contract can't access anything outside its VM. Yes if you get the ip in your dapp frontend and send it to your contract to store it.