## Stop using namespace std;

Having `using namespace std;`, especially in a header file is considered bad practice. [This][1] Stack Overflow post explains the reasoning quite well. In your case it's especially unnecessary since you do not even use something from this namespace in `BST.h` and only `std::string` in `Packet.h`.

## Unnecessary includes

Again `BST.h`. There are a lot of unused includes in there. The only one that might serve a purpose would be `Packet.h` which could easily be replaced by [a forward declaration][2]. Most of the include should go to the corresponding `.cpp` file.

## The BST
I'm not sure about the interface. If your intended usage is to pass packages by reference, it would be desirable to declare `BST::insert(Node *&p, Node *newNode)` as private, similar to the public and private versions of `preorderTraversal`. `preorderTraversal` might also be better called `printPreorder` or something like this since it only prints the nodes and does not allow to access them.

There is also a <strike>small</strike> memleak in `insert` since those `Node*`s created with `Node *newNode = new Node;` will never get deleted. [valgrind][3] confirms this. As [@TobySpeight][4] rightfully pointed out in his comment and [detailed in his answer][5], one can argue if leaking all of the tree's nodes should really be considered as a "small" memleak. A possible solution for this is to use smart pointers from `<memory>`. There is a good overview in [this blog post][6] by Herb Sutter on which type of smart pointer (e.g. `std::unique_ptr` or `std::shared_ptr`) as well as the type of parameter passing (by-reference vs. by-value) should be used to express a certain "meaning".


  [1]: https://stackoverflow.com/q/1452721/5682996
  [2]: https://stackoverflow.com/q/4757565/5682996
  [3]: http://www.valgrind.org/
  [4]: https://codereview.stackexchange.com/users/75307
  [5]: https://codereview.stackexchange.com/a/222509/92478
  [6]: https://herbsutter.com/2013/06/05/gotw-91-solution-smart-pointer-parameters/