我一直在网络上注入数据包并通过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));
答案 0 :(得分:3)
端口号为16位。使用16位,您只能获得65535.无法绕过它。另请参阅http://en.wikipedia.org/wiki/Transmission_Control_Protocol#TCP_segment_structure处的TCP标头。