Linux下关于网络设置的文件

几个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.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值