大家好,我刚学习LINUX编程,编了一个小程序,主要功能是想创建一个SOCKECT,然后绑定到本地网卡上,截取所有通过本网卡的数据包,然后打印出来。
P!Q(h6vJg
但是程序执行到revc的while循环的时候,就一直停在那里,接收不到数据,不知道是不是前面什么地方设置错了?请大家指点。
0X?/ta(w;ZLinux伊甸园论坛程序如下 :
;V {;S(_wrd
D*z/F&y
#include<stdio.h>
dV R&k/QHA/k1{3^#define SIO_RCVALL _WSAIOW(IOC_VENDOR,1)
X4E7Sf
k.fwww.linuxeden.com#include<fcntl.h>
)@Rn*II s$@#@www.linuxeden.com#include<sys/socket.h>
Linux伊甸园论坛 jKXMpJ4HBI
#include<netinet/in.h>
N7w@Pl'BX/{)Iwww.linuxeden.com#include<string.h>
jdQL4tX7Lwww.linuxeden.com#include<sys/types.h>
Q5VJsz$q T
L#include<stdlib.h>
_*d6X'Ke/]_s
V
#include<errno.h>
{`'H:r-_ d
#include<unistd.h>
M3sMg/t0rqwww.linuxeden.com#define N 1024
hK
Xp.F#define M 1024
xgH _/ymLinux伊甸园论坛typedef struct _IP{
$`9g*F_b,f:W"NU0Iunion{ uint8_t Version;
k'l8K3^T uint8_t HdrLen;};
+w$Hui3WNo
uint8_t ServiceType;
fja+Y rF6X/a6F6d'J
uint16_t TotalLen;
$B#n7o}!n^cK uint16_t ID;
i v$GK`N;?wZL L'o
union{uint16_t Flags0;uint16_t FragOff;};
%mYp7^h0~
JW.W.I;{ uint8_t TimeToLive;
#C2W&f1C)^V5yUM
uint8_t Protocol;
Linux伊甸园论坛b;Y-?Al
uint16_t HdrChksum;
r0omb9B1R7G%O7xuY uint32_t SrcAddr;
%fcb.H&vX"Vx
uint32_t DstAddr;
yh$C-Xjc0x
}IP;
R:{$\I!DKd]9|\
typedef struct _TCP
9jI,ee1j%]i
{
$}$yLbFxV uint16_t SrcPort;
u T z/z-_]u0F
uint16_t DstPort;
An.Y$aU:frD?www.linuxeden.com uint32_t SeqNum;
*IS rMRP
uint32_t AckNum;
:h%?)} n1f)C0w
uint8_t DataOff;
X)qUO%o^ uint8_t Flags1;
^+s5U0sP uint16_t Window;
dT"R ZKwww.linuxeden.com uint16_t Chksum;
Ld.UVX%_p
}*HLinux伊甸园论坛 uint16_t UrgPtr;
Linux伊甸园论坛D)d'Vj,JY"A xl.\7x
}TCP;
+}4A W\swww.linuxeden.comIP ip;
]
d7Y
j$GOD&`TCP tcp;
A*R`zOl5|kwww.linuxeden.comint printer(IP ip)
K(b+sqzFG2?
{
LP.V+vMa3a uint8_t version;
www.linuxeden.com4oY DHaF&y
uint8_t hdrlen;
Linux伊甸园论坛7X+`s;[&e j%fw
uint8_t DF,MF;
o*Z?Ar ^www.linuxeden.com uint16_t foff;
CZ}2D IY L:O!{C
version=ip.Version>>4;
P(kh}&LI)~1Iwww.linuxeden.com hdrlen=(ip.Version&0x0f)*4;