def get_ip_packet()

in zktraffic/base/network.py [0:0]


def get_ip_packet(data, client_port=0, server_port=0, is_loopback=False):

  """ if {client,server}_port is 0 any {client,server}_port is good """

  header = _loopback if is_loopback else _ethernet
  header.unpack(data)

  tcp_p = getattr(header.data, "data", None)
  if type(tcp_p) != dpkt.tcp.TCP:
    raise BadPacket("Not a TCP packet")

  if tcp_p.dport == server_port:
    if client_port != 0 and tcp_p.sport != client_port:
      raise BadPacket("Request from different client")
  elif tcp_p.sport == server_port:
    if client_port != 0 and tcp_p.dport != client_port:
      raise BadPacket("Reply for different client")
  else:
    if server_port > 0:
      raise BadPacket("Packet not for/from client/server")

  return header.data