INET Framework for OMNeT++/OMNEST
inet::tcp::TcpSpoof Class Reference

Sends fabricated TCP packets. More...

#include <TcpSpoof.h>

Inheritance diagram for inet::tcp::TcpSpoof:

Protected Member Functions

virtual void sendToIP (Packet *pk, L3Address src, L3Address dest)
 
virtual unsigned long chooseInitialSeqNum ()
 
virtual void sendSpoofPacket ()
 
virtual void initialize () override
 
virtual void handleMessage (cMessage *msg) override
 

Detailed Description

Sends fabricated TCP packets.

Member Function Documentation

◆ chooseInitialSeqNum()

unsigned long inet::tcp::TcpSpoof::chooseInitialSeqNum ( )
protectedvirtual
79 {
80  // choose an initial send sequence number in the same way as TCP does
81  return (unsigned long)SIMTIME_DBL(fmod(simTime() * 250000.0, 1.0 + (double)(unsigned)0xffffffffUL)) & 0xffffffffUL;
82 }

Referenced by sendSpoofPacket().

◆ handleMessage()

void inet::tcp::TcpSpoof::handleMessage ( cMessage *  msg)
overrideprotectedvirtual
28 {
29  if (!msg->isSelfMessage())
30  throw cRuntimeError("Does not process incoming messages");
31 
33  delete msg;
34 }

◆ initialize()

void inet::tcp::TcpSpoof::initialize ( )
overrideprotectedvirtual
22 {
23  simtime_t t = par("t");
24  scheduleAt(t, new cMessage("timer"));
25 }

◆ sendSpoofPacket()

void inet::tcp::TcpSpoof::sendSpoofPacket ( )
protectedvirtual
37 {
38  Packet *packet = new Packet("spoof");
39  const auto& tcpseg = makeShared<TcpHeader>();
40 
41  L3Address srcAddr = L3AddressResolver().resolve(par("srcAddress"));
42  L3Address destAddr = L3AddressResolver().resolve(par("destAddress"));
43  int srcPort = par("srcPort");
44  int destPort = par("destPort");
45  bool isSYN = par("isSYN");
46  unsigned long seq = par("seqNo").intValue() == -1 ? chooseInitialSeqNum() : par("seqNo");
47 
48  // one can customize the following according to concrete needs
49  tcpseg->setSrcPort(srcPort);
50  tcpseg->setDestPort(destPort);
51  tcpseg->setChunkLength(TCP_MIN_HEADER_LENGTH);
52  tcpseg->setSequenceNo(seq);
53 // tcpseg->setAckNo(...);
54  tcpseg->setSynBit(isSYN);
55  tcpseg->setWindow(16384);
57 
58  sendToIP(packet, srcAddr, destAddr);
59 }

Referenced by handleMessage().

◆ sendToIP()

void inet::tcp::TcpSpoof::sendToIP ( Packet pk,
L3Address  src,
L3Address  dest 
)
protectedvirtual
62 {
63  EV_INFO << "Sending: ";
64 // printSegmentBrief(tcpseg);
65 
66  ASSERT(pk != nullptr);
67  IL3AddressType *addressType = dest.getAddressType();
68  pk->addTagIfAbsent<TransportProtocolInd>()->setProtocol(&Protocol::tcp);
69  pk->addTagIfAbsent<DispatchProtocolReq>()->setProtocol(addressType->getNetworkProtocol());
70  auto addresses = pk->addTagIfAbsent<L3AddressReq>();
71  addresses->setSrcAddress(src);
72  addresses->setDestAddress(dest);
73 
74  emit(packetSentSignal, pk);
75  send(pk, "ipOut");
76 }

Referenced by sendSpoofPacket().


The documentation for this class was generated from the following files:
TransportProtocolInd
removed DscpReq Ipv4ControlInfo Ipv6ControlInfo up L3AddressInd TransportProtocolInd
Definition: IUdp-gates.txt:20
inet::Protocol::tcp
static const Protocol tcp
Definition: Protocol.h:112
DispatchProtocolReq
removed DscpReq Ipv4ControlInfo Ipv6ControlInfo up L3AddressInd DispatchProtocolReq L4PortInd Ipv4ControlInfo Ipv6ControlInfo down DispatchProtocolReq
Definition: IUdp-gates.txt:25
inet::tcp::TcpSpoof::sendSpoofPacket
virtual void sendSpoofPacket()
Definition: TcpSpoof.cc:36
inet::packetSentSignal
simsignal_t packetSentSignal
Definition: Simsignals.cc:96
inet::insertTransportProtocolHeader
void insertTransportProtocolHeader(Packet *packet, const Protocol &protocol, const Ptr< TransportHeaderBase > &header)
Definition: L4Tools.cc:77
inet::tcp::TcpSpoof::chooseInitialSeqNum
virtual unsigned long chooseInitialSeqNum()
Definition: TcpSpoof.cc:78
inet::tcp::TcpSpoof::sendToIP
virtual void sendToIP(Packet *pk, L3Address src, L3Address dest)
Definition: TcpSpoof.cc:61
inet::tcp::TCP_MIN_HEADER_LENGTH
const B TCP_MIN_HEADER_LENGTH
Definition: TcpHeader_m.h:63