几个Linux下关于网络设置的文件
etc/hosts 设置主机名
etc/sysconfig/network 设置getway,主机名
etc/sysconfig/network-scripts/ifcfg-eth0 设置ip,mask,getway
etc/xinetd/telnet 设置telnet
命令: hostname 查看主机名
service network/xinetd restart 设置网络/服务重启
chkconfig telnet on 开启telnet服务
chkconfig --list 查看开启的服务
一次网络编程作业错误的调试
很简单的LINUX下的网络作业
客户发出连接请求,服务器建立连接,返回信息说明连接成功
运行出现错误:在服务器send信息给客户时出现Socket operation on non-socket错误
#include <sys/types.h>
#include <netinet/in.h>
#include <strings.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#define PORT 1234
#define MAXDATASIZE 100
#define LISTENQ 5
int str_serv(int sockfd,struct sockaddr_in cliaddr);
int main(int argc, char **argv)
{
int listenfd, connfd;
socklen_t len;
struct sockaddr_in servaddr, cliaddr;
if((listenfd=socket(AF_INET,SOCK_STREAM,0))==-1)
{
perror("Create socket error");
exit(-1);
}
bzero(&servaddr,sizeof(servaddr));
servaddr.sin_family=AF_INET;
servaddr.sin_addr.s_addr=htonl(INADDR_ANY);
servaddr.sin_port=htons(PORT);
int opt = SO_REUSEADDR;
setsockopt(listenfd, SOL_SOCKET, SO_REUSEADDR, &opt, sizeof(opt));
if(bind(listenfd,(struct sockaddr*)&servaddr,sizeof(servaddr))==-1)
{
perror("Bind error");
exit(-1);
}
if(listen(listenfd,LISTENQ)==-1)
{
perror("Listen error");
exit(-1);
}
for(;;)
{
len=sizeof(cliaddr);
if(connfd=accept(listenfd,(struct sockaddr*)&cliaddr,&len)==-1)
{
perror("Listen error");
exit(-1);
}
str_serv(connfd,cliaddr);
}
close(listenfd);
}
int str_serv(int sockfd,struct sockaddr_in cliaddr)
{
ssize_t numbytes;
int i;
char recvline[MAXDATASIZE],sendline[MAXDATASIZE];
printf("Connect from %s:%d./n", inet_ntoa(cliaddr.sin_addr),ntohs(cliaddr.sin_port));
if(send(sockfd,"Welcome to my server./n",22,0)==-1)
{
perror("send error.");
exit(-1);
}
。。。。。
调试过程:在bind,listen,accept,send前后监视listenfd,connfd变量的变化
显示如下:
在bind后:listenfd=3
在listen后:listenfd=3
在accept后:listenfd=3,connfd=0
转子以后:sockfd=0
发现问题出现在accept句,connfd不正常。
if((connfd=accept(listenfd,(struct sockaddr*)&cliaddr,&len))==-1) 少一个括号!
其他主机访问本机VMware虚拟Linux的telnet服务设置
参考网上论坛的方法,引用了一些高手的帖子,自己验证成功
1。安装虚拟机及RH9
2。安装vmware-tool:
3。网络设置:
4.开启telnet服务。
5.端口映射
6.验证
1。安装虚拟机及RH9
2。安装vmware-tool:
如果在图形界面下,首先要切换到文本模式。
右键点击桌面,打开一个終端
在終端里:
su
#/sbin/telinit 3
图形界面消失,敲回车几下,在文本方式下登录。
在windows的vmware的窗口菜单中选vm->install vmware tools
在虚拟机中:
su
mount /dev/cdrom /mnt/cdrom
cd /tmp
tar zxf /mnt/vmware-linux-tools.tar.gz
cd vmware-tools-distrib
./vmware-install.pl
回答并设置屏幕分辨率,除了分辨率需要选择外,直接回车就行了。
返回到默认的图形界面(运行级别5)
/sbin/telinit 5
3。网络设置:
采用NAT连接网络。在windows xp网络设置中查看到vmnet1是hostonly的接口,而vmnet8是使用NAT的网络接口。用VMnet8,然后在win主机上用ipconfig查看VMnet8的IP地址,一般是192.168.X.1/255.255.255.0, 此时VMnet8的设置应该是自动获取IP,现在改成静态IP,并把此IP直接填入VMnet8里,不设网关。同时在VM网络设置里的NAT项中查看VMnet8,一般是192.168.X.2/255.255.255.0,这个地址就是VMnet8,NAT的网关。在LINUX下把网卡IP设置成和VMnet8一个网段的IP(192.168.X.Z/255.255.255.0),网关设置成刚才查看的那个IP192.168.X.2即可。
现在linux可以连通Internet,但不能被外部主机访问。
4.开启telnet服务。
telnet server不作为独立的服务器程序运行,而是受xinetd程序的控制,启动配置文件为/etc/xinetd.d/telnet,默认xinetd程序并不启动该服务,可在chkconfig --list看出telnet是关闭的,/etc/xinetd.d/telnet中disable=yes可通过下面的方式启动telnet server:
1) chkconfig telnet on //该命令修改了/etc/xinetd.d/telnet的配置,设置disable=no
2) service xinetd restart
再次chkconfig --list看到telnet server已经启动.
5.端口映射
linux用的IP为内部虚拟的192.168.x.z,外部不能直接访问此IP,需要映射linux的telnet 23端口到主机。具体配置如下:VMware中Edit ->Virtual Network Setting ->NAT ->选择NAT的Vmnet主机->Edit->提交端口->添加引入的TCP端口。主机端口设为23,虚拟机IP地址设为Linux正在使用的IP
6.验证
在windows命令提示符下输入netstat -an ,显示如下:
Active Connections
Proto Local Address Foreign Address State
TCP 0.0.0.0:23 0.0.0.0:0 LISTENING
说明端口已经映射。本机要访问telnet服务可以访问物理网卡的IP地址或者linux的IP,外部主机访问物理网卡IP.