440,222 Members | 2,354 Online
Need help? Post your question and get tips & solutions from a community of 440,222 IT Pros & Developers. It's quick & easy.

# manipulating hex values

 P: n/a Hi all, I am relatively new to socket programming. I am attempting to use raw sockets to spoof my IP address. From what I can tell I will have to build from the Ethernet layer on up. This is fine, but I am having some trouble with manipulating my hex values. Seems to me that there are two ways to store hex values: 1. as literal hex - 0x55aa 2. as a string - "\x55aa" If I want to convert hex to decimal I can use: int("\x55aa", 16) # note that plain 0x55aa, instead of "\x55aa", will raise an exception The Question: If I want to do any kind of calculation I have found its best to just convert my values to decimal, do the math, then convert back to hex. In my bellow code I get """byteList.append(int(value,16)) ValueError: invalid literal for int()""" when attempting to run. I do not understand why this exception is being raised? It is a for loop iterating over a list of hex strings. Sorry for the long-ish question. Any help or comments would be appreciated. ----my checksum--- def calcIPCheckSum(ipHeaders): byteList = [] # convert groups from hex to dec for value in ipHeaders: byteList.append(int(value,16)) # Exception raised here! # 1's compliment for index in range(len(byteList)): byteList[index] = abs(byteList[index] - 65535) # add bytes together shifting the extra byte total = 0 for value in byteList: total = total + value if total 65535: total = total - 65535 return hex(total) checksum = calcIPChecksum(["\x45" + "\x00", "\x01\x4a", "\x00\x00", "\x40"+"\x00", "\x20"+"\x11"]) ------------------------- Cheers, Steve Apr 1 '08 #1