Luke
Luke

Reputation: 1806

Can I include metadata/header in a tcp packet send over a socket?

I need to send packets over sockets and want to include some metainformation without altering the packet content itself. Is this possible? If yes: Can I do it in perl?

I am writing a proxy server and when I send a packet to the proxyserver i need to somehow include the port of the application in which the proxy server stands between the client and the server I want to use.

Upvotes: 0

Views: 738

Answers (1)

Alex Tape
Alex Tape

Reputation: 2291

you can use Net::ProxyMod

Description Net::ProxyMod

This is a small module that allows you to create a proxy for packet alteration
and debugging. You just need to specify two functions in and outgoing packets 
will be passed to. In these functions you can then modify the packet if desired. 
This is useful to get in between an existing client and server for testing 
purposes.

ProxyMod can be used as a standard proxy or as a transparent proxy together 
with a firewall package such as ipfw on FreeBSD. Please refer to the ipfw 
documenation for more information. 

or give Net::Divert a try

Description Net::Divert

The Net::Divert module facilitates the use of divert sockets for packet alteration
on FreeBSD and MacOSX.

Divert sockets can be bound to a certain port. This port will then receive all 
packets you divert to it with the help of a divert filter rule. On FreeBSD and 
MacOSX ipfw allows you to add such a rule. Please refer to the divert and ipfw 
manpages for more information.

This module allows you to create a divert socket and then just supply a function 
that will deal with the incoming packets.

new(host,port) will create a new divert object. It will also create a divert 
socket bound to the specified port at the given host/ip.

getPackets(func) will create a loop getting all incoming packets and pass them 
onto the specified function you created. This function will be called with two 
arguments: packet and fwtag. Fwtag contains the rule number where the packet is 
reinserted. Refer to divert(4) for more information.

putPacket(packet,fwtag) reinsert a packet at the specified fw rule (normally you 
don't want to alter fwtag, as it is easy to create infinite loops this way)

Upvotes: 1

Related Questions