1. linux服务器被攻击如何进行抓包来进行分析
用途
tcpmp简义:mp the traffic on a network,根据使用者的定义对网络上的数据包进行截获的包分析工具。
tcpmp可以将网络中传送的数据包的“头”完全截获下来提供分析。它支持针对网络层、协议、主机、网络或端口的过滤,并提供and、or、not等逻辑语句来帮助你去掉无用的信息。
语法
tcpmp [-adeflnNOpqStvx][-c<数据包数目>][-dd][-ddd][-F<表达文件>][-i<网络界面>]
[-r<数据包文件>][-s<数据包大小>][-tt][-T<数据包类型>][-vv][-w<数据包文件>][输出数据栏位]
参数说明:http://write.blog.csdn.net/postedit/72898655
-a 尝试将网络和广播地址转换成名称。
-c<数据包数目> 收到指定的数据包数目后,就停止进行倾倒操作。
-d 把编译过的数据包编码转换成可阅读的格式,并倾倒到标准输出。
-dd 把编译过的数据包编码转换成C语言的格式,并倾倒到标准输出。
-ddd 把编译过的数据包编码转换成十进制数字的格式,并倾倒到标准输出。
-e 在每列倾倒资料上显示连接层级的文件头。
-f 用数字显示网际网络地址。
-F<表达文件> 指定内含表达方式的文件。
-i<网络界面> 使用指定的网络截面送出数据包。
-l 使用标准输出列的缓冲区。
-n 不把主机的网络地址转换成名字。
-N 不列出域名。
-O 不将数据包编码最佳化。
-p 不让网络界面进入混杂模式。
-q 快速输出,仅列出少数的传输协议信息。
-r<数据包文件> 从指定的文件读取数据包数据。
-s<数据包大小> 设置每个数据包的大小。
-S 用绝对而非相对数值列出TCP关联数。
-t 在每列倾倒资料上不显示时间戳记。
-tt 在每列倾倒资料上显示未经格式化的时间戳记。
-T<数据包类型> 强制将表达方式所指定的数据包转译成设置的数据包类型。
-v 详细显示指令执行过程。
-vv 更详细显示指令执行过程。
-x 用十六进制字码列出数据包资料。
-w<数据包文件> 把数据包数据写入指定的文件。
案例
tcpmp -s 0 -i eth1 -w 94ip.cap
注:监听 ETH1网站 保存文件为94ip.cap
网云互联(www.94ip.net/www.94ip.com)是一家从事服务器安全防护、入侵检测、服务器代维等为一体的公司,免费服务器安全检测,并有24小时在线运维工程师为您服务。
2. linux网络编程中如何实现服务器端多个read()和客户端write( )
TCP通信的模式如下图,比较固定,对着图编代码就可以了:
因为客户端没有指定IP地址和端口,所以其IP和端口都是内核随机分配的。
3. linux建立TCP服务器后,TCP客户端与服务器连接成功后,怎样获取客户端的MAC地址
我认为你是从 socket中取不到这部分的信息的.
你得再操作 arp的缓存部分才行. ARP那部分如果在特殊情况,很乱套.比如有攻击或是IP地址设置有冲突啥地.
---
详细的C语言怎么操作ARP缓存我不太清楚. 但你如果想知道.就得查一下这部分怎么做了.
高层的socket操作是得不到的.
只有直连网段的计算机有MAC地址信息.经过路由来的数据包.取不到.
4. 客户端如何读取服务器发送的数据
一般来讲是客户端向服务器发送服务请求,服务器根据客户端所发送的服务请求给客户端发数据。这里包括网络协议和服务认证。你可以再网上下载抓包工具来读取发送服务请求和返回服务请求的结果。 数据都是二进制、八进制和十六进制相互转换封包来进行发送的。客户端向服务器发送一个请求,客户端会对该请求认证来确定是否合法。合法则会将数据封包加密反馈给客户端,客户端则得到请求结果。具体你可查一些有关网络服务的资料。
5. linux下C语言怎么读取http文件内容
http是协议
不是文件
你这个说法就有问题了。
如果你想用C读网页 可以考虑使用socket 不过还是有些麻烦的。
6. linux环境下,c语言怎么读取WEB服务器的80端口上页面的内容
已知url ,host, port;
int s, size;
struct sockaddr_in sin;
struct hostent* phe;
char cmd[256];
char msg_hdr[1000];
char* p;
//准备http中GET 方法的请求。
sprintf(cmd,"GET %s\r\nHTTP/1.1\r\nHost:%s", url, host);
//创建socket
if((s=socket(PF_INET,SOCK_STREAM,0))<0)
return -1;
//取得远程主机的IP地址,失败函数返回-1
if((phe = gethostbyname(host)) == NULL)
return -1;
memset(&sin,0,sizeof(sin));
memcpy(&sin.sin_addr,phe->h_addr,sizeof(struct in_addr));
sin.sin_family=AF_INET;
sin.sin_port=htons(pms->port);
//跟远程机器建立连接,失败函数返回-1
if(connect(s,(struct sockaddr*)&sin,sizeof(sin))==-1)
return -1;
//发送GET请求
if(write(s,cmd,strlen(cmd))<0)
return 0;
//从链接描述符(连接管道)中读取传送过来的数据
if(read(s, msg_hdr, 300)<0)
error;
close(s);
//读到该文件的大小
if((p=strstr(msg_hdr,"Content-Length"))||(p=strstr(msg_hdr,"Content-length:")))
p+=16;
else
error;
//返回大小
size = atoi(p);
sprintf(cmd,"GET %s HTTP/1.1\r\nHost: %s\r\nAccept: */*\r\nPragma: no-cache\r\nCache-Control: no-cache\r\nConnection: close\r\nRange: bytes0-%d\r\n\r\n", url, host, size);
//创建套接口
if((s=socket(AF_INET,SOCK_STREAM,0))<0)
return 0;
//取得远程主机的IP地址,失败返回0
if((phe = gethostbyname(host)) == NULL)
return 0;
memset(&sin,0,sizeof(sin));
memcpy(&sin.sin_addr,phe->h_addr,sizeof(struct in_addr));
sin.sin_family=AF_INET;
sin.sin_port=htons(port);
//建立连接
if(connect(s,(struct sockaddr*)&sin,sizeof(sin))==-1)
return 0;
//发送读取请求
if(write(s,cmd,strlen(cmd))<0)
error;
read(s, buf, BUFSIZE)..............