使用 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。
我一直在网络上注入数据包,并通过 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。