使用 pcap 和 dnet 设置 TCP 端口 > 65535

Set a TCP port > 65535 with pcap and dnet

我一直在网络上注入数据包,并通过 wireshark 观察效果。我能够正确设置和更改 tcp 端口并设置源和目标。但是,我现在遇到了一个问题。我需要做的一件事是从端口 66,000 设置源端口。每次我尝试它只是将数字放入 wireshark 中 1163 这是因为它应该是一个短整数。有谁知道如何让它接受大数字。我知道 big endian 和 htonl 应该可以工作,所以我也试过了,但这并没有解决问题。

这是我使用的代码

void extract(u_char *user, struct pcap_pkthdr *h, u_char *pack ) {
  struct eth_hdr *ethhdr;
  struct ip_hdr *iphdr;
  struct tcp_hdr *tcphdr;

  ethhdr = (struct eth_hdr *)pack;
  iphdr = (struct ip_hdr *)(pack + ETH_HDR_LEN);
  tcphdr = (struct tcp_hdr *) (pack + ETH_HDR_LEN + (4*iphdr->ip_hl));
  //Set the ports
  tcphdr->th_sport = htons(66666);
  tcphdr->th_dport = htons(atoi(destString));

端口号为16位。对于 16 位,您最多只能获得 65535。没有办法绕过它。另见 http://en.wikipedia.org/wiki/Transmission_Control_Protocol#TCP_segment_structure 处的 TCP header。