Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How can I send anything other than strings through Python sock.send()

I'm very very new to programming in Python, but out of necessity I had to hack something together very quick.

I am trying to send some data over UDP, and I have everything working except for the fact that when I do socket.send(), I have to enter the data in string form. Here is my program so you can see what I am doing:

import socket


IPADDR = '8.4.2.1'
PORTNUM = 10000

s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM, 0)

s.connect((IPADDR, PORTNUM))

s.send('test string'.encode('hex'))

s.close()

How could I get it so that I can do something in hexadecimal like s.send(ff:23:25:a1) for example, so that when I look at the data portion of the packet in Wireshark, I see ff:23:25:a1

like image 998
Adam Avatar asked Jan 18 '12 01:01

Adam


People also ask

What can you do with Python socket?

Sockets and the socket API are used to send messages across a network. They provide a form of inter-process communication (IPC). The network can be a logical, local network to the computer, or one that's physically connected to an external network, with its own connections to other networks.

How do you use the Send function in Python?

Sending Values to Generators The send() method resumes the generator and sends a value that will be used to continue with the next yield . The method returns the new value yielded by the generator. The syntax is send() or send(value) . Without any value, the send method is equivalent to a next() call.

How do you send data from client to server in socket programming?

Create a socket with the socket() system call. Initialize the socket address structure as per the server and connect the socket to the address of the server using the connect() system call. Receive and send the data using the recv() and send(). Close the connection by calling the close() function.


2 Answers

Are you using Python 2.7 or 3.2?

In 3.2 you could do:

data = bytes.fromhex('01AF23')
s.send(data)

Data would then be equal to:

b'\x01\xAF\x23'

In 2.7 the same could be accomplished with:

data = '01AF23'.decode('hex')
like image 164
Chris Avatar answered Jan 01 '23 23:01

Chris


You can send the hex values by first forming a list of hex values like below:

hex_list = [0x00, 0x00, 0x00, 0x01, 0x00, 0x0c, 0x00]

then, send them as bytes:

s.sendto(bytes(hex_list), addr1)
like image 25
Mahadev Avatar answered Jan 01 '23 21:01

Mahadev