How does a server obtain the IP Address of a user? Is it possible to fool the server by spoofing the IP Address?
When you send a request to the server, the server need to know where to answer, it's with your ip address. This is directly based on the TCP/IP protocol and in a lower level than web servers.
For the reason why Firebug doesn't show your IP address, it's like when you receive mail (paper), you have your address written in front, and the sender in the back. Firebugs shows you the content of the letter, not the sender and the receiver address (IP in IT).
Source IP address is being sent on different level. If you want to see it, you need to use different tool (e.g. Wireshark, Packetyzer or Microsoft Network Monitor). Firebug displays only HTTP requests not the IP connection details.
To spoof the source IP address, you can use some Packet generator - keep in mind that when you spoof the source IP address, the server will respond to that source address. Watch this video to find out more about the IP Spoofing.
As explained before, When you request a page to a web server, your address is basically needed for the reply. This is a basic networking principle, to read a bit more about it, you could look up these videos on youtube CCNA IP ADDRESSES.
You could spoof your ip address by using simple C code, such as shown here UDP Flooder, in this case the code use random IP addresses or defined IP addresses to flood a phone, and the phone only replies via PING to a random or crafted IP address. (notice, that this tools as been made for testing purposes only, and can only be used on your own equipement)
And finally if you want to play with network packets, there is this good tutorial about scapy Here which allow you to forge packets. (basically the tutorial shows you how to make a Man In the Middle with Scapy)
A HTTP header from your computer is in the highest layer of the OSI Model (Application Layer, Layer 7), as it moves through each layer in your device it applies a new header. Your IP Address will not be added until the Network Layer (Layer 3). Firebug will only look at the HTTP headers you are sending, not inspect the traffic lower down in the network stack.
It is possible to change your IP address using a proxy or VPN for example. However if you spoof an IP address the server will send the response to that spoofed IP Address, so this it is mainly used when you wish to conceal your identity and do not worry about about the return packets. Read up on IP Address Spoofing for more information.
If you wish to "hide" your IP address when talking to a server, you could send your traffic through a proxy. Then the server will see the proxy's IP address instead of "yours". If you're looking for an anonymizing service, you could search for VPN tunnel providers or have a look at Tor, the onion router project.
THe Client IP address can be captured in the X-Forwarded-For field in the HTTP headers, if the box has enabled for this. In web farms it's usually configured on a server load balancer. Configuration is necessary if there is a NAT device in the path.