I was looking to simulate an embedded device for testing and looking into FTP server implementations a simple bitwise operations question popped up: the way PASV command is standardized requires TCP port numbers to be transferred in two octets represented as integers.
This is how the server responds to a PASV command:
227 Entering Passive Mode (h1,h2,h3,h4,p1,p2).
Which indicates and IP address and a port number. To find the IP address is easy. it’s only the first four octets. Port number requires a little math: p1 * 256 + p2. That’s all fine and documented quite a bit. But in a server implementation one needs to figure out these octets from a short integer as the port number:
p1 = port >> 8 p2 = port & 255
I just like bitwise operations so much, I though this little experiment deserved a note on the side.