tftpc语言实现
‘壹’ 用c语言socket编程服务器和客户端能相互传文件,请问怎样在服务器端设置帐号和密码,在下载时能显示进度条
1、可以在client端登入时write(发送)帐号和密码给server端,当server端接受到内容时判断是否是你预设的帐号密码,是则允许下载,否则关闭其socket。
2、是要客户端看到进度条? 这样就要要求在下载文件时server端要先发这个文件的大小给client端,client端就可以通过这个大小和接受到的字节数比较后打印进度条(printf("#");).
文件大小可用int stat(const char *restrict path, struct stat *restrict buf);函数获取。
tftp命令是linux下的一个命令,那么它的具体语法是怎样的呢?下面由我为大家整理了linux tftp命令的相关知识,希望对大家有帮助!
1.linux tftp命令语法
tftp(选项)(参数)
2.linux tftp命令选项
-c:指定与tftp服务器连接成功后,立即要执行的指令;
-m:指定文件传输模式。可以是ASCII或者Binary;
-v:显示指令详细执行过程;
-V:显示指令版本信息。
3.linux tftp命令参数
主机:指定tftp要联机的tftp服务器的ip地址或主机名。
4.linux tftp命令实例
1、安装tftp服务器
需要安装xinetd、tftp和tftp-server 3个软件
如果能上网,通过yum安装:
yum install xinetd
yum install tftp
yum install tftp-server
如果不能上网,可以直接安装提供的rpm包:
rpm -ivh xinetd-2.3.14-18.fc9.i386.rpm
rpm -ivh tftp-0.48-3.fc9.i386.rpm
rpm -ivh tftp-server-0.48-3.fc9.i386.rpm
2、配置tftp服务器
修改/etc/xinetd.d/tftp文件,将其中的disable=yes改为disable=no。主要是设置TFTP服务器的根目录,开启服务。修改后的文件如下:
service tftp {
socket_type =dgram
protocol =udp
wait =yes
user =root
server =/usr/sbin/in.tftpd
server_args =-s /home/mike/tftpboot -c
disable =no
per_source =11
cps =100 2
flags =IPv4
}
说明:修改项server_args= -s -c,其中处可以改为你的tftp-server的根目录,参数-s指定chroot,-c指定了可以创建文件。
3、启动tftp服务器并关闭防火墙
/etc/init.d/iptables stop //关闭防火墙
sudo /sbin/service xinetd start
或
service xinetd restart
/etc/init.d/xinetd start
看到启动[OK]就可以了
4、查看tftp服务是否开启
netstat -a | grep tftp
显示结果为udp 0 0 *:tftp *:*表明服务已经开启,就表明tftp配置成功了。
5、tftp使用
复制一个文件到tftp服务器目录,然后在主机启动tftp软件,进行简单测试。
tftp 192.168.1.2
tftp>get
tftp>put
tftp>q
6、tftp命令用法如下
tftp your-ip-address
进入TFTP操作:
connect:连接到远程tftp服务器
mode:文件传输模式
put:上传文件
get:下载文件
quit:退出
verbose:显示详细的处理信息
tarce:显示包路径
status:显示当前状态信息
binary:二进制传输模式
ascii:ascii 传送模式
rexmt:设置包传输的超时时间
timeout:设置重传的超时时间
help:帮助信息
? :帮助信息
7、如果老是出现“AVC Denial, click icon to view”的错误,并不能传输文件,需要作如下修改
修改/etc/sysconfig/selinux,将SELINUX设定为disable,使用命令setenforce 0让selinux配置文件生效。
8、Busybox中tftp命令的用法
命令格式为:
tftp [option] ... host [port]
如果要下载或上传文件的话是一定要用这些option的。
-g 表示下载文件 (get)
-p 表示上传文件 (put)
-l 表示本地文件名 (local file)
-r 表示远程主机的文件名 (remote file)
例如,要从远程主机192.168.1.2上下载 embedexpert,则应输入以下命令
tftp -g -r embedexpert 192.168.1.2
‘叁’ 用C语言实现基于UDP协议的文件传输系统,其中服务端接受和发送文件需要用到哪些函数
可以参考TFTP源代码,TFTP就是基于UDP的,记得是使用socket的。
‘肆’ tftp到底怎么使用
如何使用Tftp:
TFTP 自带的帮助信息:
TFTP [-i] host [GET | PUT] source [destination]
-i Specifies binary image transfer mode (also called
octet). In binary image mode the file is moved
literally, byte by byte. Use this mode when transferring binary files.
host Specifies the local or remote host.
GET Transfers the file destination on the remote host to
the file source on the local host.
PUT Transfers the file source on the local host to
the file destination on the remote host.
source Specifies the file to transfer.
destination Specifies where to transfer the file.
说明:
-i选项是以二进制模式传送文件,很多Exploit代码就需要用这种模式来传送。
Host是开启了tftp服务的主机,可以是本地主机也可以是远程主机。
get就是到当前运行的目穗孝录里面下载,而put就是把文件上传到了开了tftp服务的机余山子。Source是你要上传或者是下载的文件名称。
下面举几个列子:
C:Longker>tftp -i 202.xx.xx.165 get sc.exe
tftp -i 202.xx.xx.165 get sc.exe
Transfer successful: 63248 bytes in 1 second, 63248 bytes/s
这个是从开了tftp服务的主机下载sc.exe程序,速度不错吧 :)
C:Longker>tftp -i 202.xx.xx.165 put sc.exe
tftp -i 202.xx.xx.165 put sc.exe
Transfer successful: 63248 bytes in 1 second, 63248 bytes/s
上面是把sc.exe上传到tftp服务器。竖族中
‘伍’ 如何利用UNIX的TFTP和RCP配置路由器
在网络应用中,最普遍的应用莫过于文件传输,利用TFTP和RCP 功能不但可以实现文件在计算机之间传输,而且可以实现文件在计算机和路由器之间的传递。下面介绍如何利用TFTP和RCP 命令进行CISCO 路由器的配置。
一、利用TFTP服务配置CISCO路由器
TFTP命令在CISCO路由器的参数配置中运用较广,可以利用它进行CISCO路由器的IOS的'版本更新,也可以将当前路由器的参数配置保存到安装UNIX操作系统的计算机相关目录下。
1、启动UNIX服务器上的tftp服务,并指明下载目录升蚂数为/tftpboot.
以SCO UNIX系统为例,在/etc/services文件中定义
tftp 69/udp
在/etc/inetd.conf文件中定义
tftp tli udp wait root /usr/etc/tftpd tftpd -s /tftpboot
启物棚动tftp后台服务
/etc/inetd –c
2、建立/tftpboot目录,并设定目录权限。
建立下载目录
mkdir /tftpboot
将目录属性改为“可读写
chmod 777 /tftpboot
3、在目录下,建立空文件(如:zj-r7513-confg),并设定权限。
进入相应目录
cd /tftpboot
建立空文件
toUCh zj-r7513-confg
将目录属性改为“可读写
chmod 777 zj-r7513-confg
4、进入路由器,下载配置文件。
zj-r7513# run tftp
按照屏幕提示进行相应操作。
二、利用RCP服务配置吵首CISCO路由器
利用rcp命令可以更方便地将路由器配置参数在UNIX主机与路由器之间传输。
1、在UNIX主机建立相应用户(如:netadmin1),并使该用户在系统登陆时不需要口令校验。
2、配置路由器参数。
ip rcmd remote-username netadmin1
3、进入路由器,进行配置参数传递。
zj-r7513# run rcp
按照屏幕提示进行相应操作。
‘陆’ STM32F4怎么用LWIP协议栈里面的TFTP协议上传文件
第一步:用tftpserver.c中的err_t tftp_send_message(struct udp_pcb *upcb, struct ip_addr *to_ip, int to_port, char *buf, int buflen)向指定地冲中址发送写文件请求;
第二步:用tftpserver.c中的void process_tftp_request(struct pbuf *pkt_buf, struct ip_addr *addr, u16_t port)函陆闷数处理回应,如果接收到回应后,process_tftp_request函数中的int tftp_process_write(struct udp_pcb *upcb, struct ip_addr *to, int to_port, char *FileName)函数发送数据文件。
基本流程就是上述所说散悉山,但是tftp_send_message()函数中的参数struct udp_pcb *upcb,数据结构非常复杂
struct udp_pcb {
/* Common members of all PCB types */
IP_PCB;
/* Protocol specific PCB members */
struct udp_pcb *next;
u8_t flags;
/* ports are in host byte order */
u16_t local_port, remote_port;
#if LWIP_IGMP
/* outgoing network interface for multicast packets */
struct ip_addr multicast_ip;
#endif /* LWIP_IGMP */
#if LWIP_UDPLITE
/* used for UDP_LITE only */
u16_t chksum_len_rx, chksum_len_tx;
#endif /* LWIP_UDPLITE */
/* receive callback function
* addr and port are in same byte order as in the pcb
* The callback is responsible for freeing the pbuf
* if it's not used any more.
*
* ATTENTION: Be aware that 'addr' points into the pbuf 'p' so freeing this pbuf
* makes 'addr' invalid, too.
*
* @param arg user supplied argument (udp_pcb.recv_arg)
* @param pcb the udp_pcb which received data
* @param p the packet buffer that was received
* @param addr the remote IP address from which the packet was received
* @param port the remote port from which the packet was received
*/
void (* recv)(void *arg, struct udp_pcb *pcb, struct pbuf *p,
struct ip_addr *addr, u16_t port);
/* user-supplied argument for the recv callback */
void *recv_arg;
};
‘柒’ linux下的tftp怎么使用
tftp命令用在本机和tftp服务器之间使用TFTP协议传输文件。
TFTP是用来下载远程文件的最简单网络协议,它其于UDP协议而实现。嵌入式linux的tftp开发环境包括两个方面:一是linux服务器端的tftp-server支持,二是嵌入式目标系统的tftp-client支持。因为u-boot本身内置支持tftp-client,所以嵌入式目标系统端就不用配置了。下面就详细介绍一下linux服务器端tftp-server的配置。
语法tftp(选项)(参数)选项
-c:指定与tftp服务器连接成功后,立即要执行的指令;
-m:指定文件传输模式。可以是ASCII或者Binary;
-v:显示指令详细执行过程;
-V:显示指令版本信息。 参数
主机:指定tftp要联机的tftp服务器的ip地址或主机名。
实例1、安装tftp服务器
需要安装xinetd、tftp和tftp-server 3个软件
如果能上网,通过yum安装:
yumxinetd
yuminstalltftp
yuminstalltftp-server
如果不能上网,可以直接安装提供的rpm包:
rpm-ivhxinetd-2.3.14-18.fc9.i386.rpmrpm-ivhtftp-0.48-3.fc9.i386.rpm
rpm-ivhtftp-server-0.48-3.fc9.i386.rpm
2、配置tftp服务器
修改/etc/xinetd.d/tftp文件,将其中的disable=yes改为disable=no。主要是设置TFTP服务器的根目录,开启服务。修改后的文件如下:
tftp
{
socket_type=dgram
protocol=udp
=yes
user=root
server=/usr/sbin/in.tftpd
server_args=-s/home/mike/tftpboot-c
disable=no
per_source=11
cps=1002
flags=IPv4
}
说明:修改项server_args= -s <path> -c,其中<path>处可以改为你的tftp-server的根目录,参数-s指定chroot,-c指定了可以创建文件。
3、启动tftp服务器并关闭防火墙
/etc/.d/
stop//关闭防火墙
/sbin/servicexinetdstart
或
servicexinetdrestart
/etc/init.d/xinetdstart
看到启动[OK]就可以了
4、查看tftp服务是否开启
-a|
tftp
显示结果为udp 0 0 *:tftp *:*表明服务已经开启,就表明tftp配置成功了。
5、tftp使用
复制一个文件到tftp服务器目录,然后在主机启动tftp软件,进行简单测试。
tftp192.168.1.2tftp>get<download
>
tftp>put<uploadfile>
tftp>q
6、tftp命令用法如下
tftpyour-ip-address进入TFTP操作:
- connect:连接到远程tftp服务器
- mode:文件传输模式
- put:上传文件
- get:下载文件
- quit:退出
- verbose:显示详细的处理信息
- tarce:显示包路径
- status:显示当前状态信息
- binary:二进制传输模式
- ascii:ascii 传送模式
- rexmt:设置包传输的超时时间
- timeout:设置重传的超时时间
- help:帮助信息
- ? :帮助信息
7、如果老是出现“AVC Denial, click icon to view”的错误,并不能传输文件,需要作如下修改
修改/etc/sysconfig/selinux,将SELINUX设定为disable,使用命令setenforce 0让selinux配置文件生效。
8、Busybox中tftp命令的用法
命令格式为:
tftp[option]...[port]
如果要下载或上传文件的话是一定要用这些option的。
-g表示载文件(get)
-p表示上传文件(put)
-l表示本地文件名(localfile)
-r表示远程主机的文件名(remotefile)
例如,要从远程主机192.168.1.2上下载 embedexpert,则应输入以下命令
tftp-g-rembedexpert192.168.1.2‘捌’ C++语言怎么使用tftp.exe来给对方传输
pid_t pid = 0;
int ret = SUCCESS;
int nRetry = 5;
if (NULL == szCmd)
{
return FAILURE;
}
while (0 < nRetry--)
{
if (0 > (pid = vfork()))
{
sleep(1);
}
else
{
break;
}
}
if (0 > pid)
{
DBG("fork failed retry=%d\n", nRetry);
ret = FAILURE;
}
else if (0 == pid)
{
int fd;
for(fd=3; fd < getdtablesize(); fd++)
close(fd);
/*只需要将tftp.exe文件放在拿仿租和需要传送大困的文件同一个消兆文件夹下,比如要传送hello.exe,tftp.exe所在的IP地址为192.168.0.2*/
execl("/bin/sh", "sh", "-c", "tftp -gr hello.exe 192.168.0.2”", NULL);
exit(127);
}
else
{
while (0 > waitpid(pid, &ret, 0))
{
if (EINTR != errno)
{
ret = FAILURE;
break;
}
}
}
return ret;
‘玖’ 怎样网卡设置混杂模式
有时候为嗅探到网络上的数据,需要将网卡设置到混杂袜辩模式。进入该模式将网络上的数据一并抓获,为此在告烂缺历者设置nic的混杂模式的时候有诸多方法:
一、通过shell命令来实现:
ifconfig eth1 promisc 设置混杂模式
ifconfig eth1 -promisc 取消混杂模式
执行结果如下
[root@localhost tftpboot]# ifconfig
eth6 Link encap:Ethernet HWaddr 08:00:27:70:1D:79
inet6 addr: fe80::a00:27ff:fe70:1d79/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:100124 errors:0 dropped:0 overruns:0 frame:0
TX packets:8795 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:12986638 (12.3 MiB) TX bytes:6452270 (6.1 MiB)
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:1303 errors:0 dropped:0 overruns:0 frame:0
TX packets:1303 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:303973 (296.8 KiB) TX bytes:303973 (296.8 KiB)
[root@localhost tftpboot]# ifconfig eth6 promisc
[root@localhost tftpboot]# ifconfig
eth6 Link encap:Ethernet HWaddr 08:00:27:70:1D:79
inet6 addr: fe80::a00:27ff:fe70:1d79/64 Scope:Link
UP BROADCAST RUNNING PROMISC MULTICAST MTU:1500 Metric:1
RX packets:100154 errors:0 dropped:0 overruns:0 frame:0
TX packets:8795 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:13007885 (12.4 MiB) TX bytes:6452270 (6.1 MiB)
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:1303 errors:0 dropped:0 overruns:0 frame:0
TX packets:1303 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:303973 (296.8 KiB) TX bytes:303973 (296.8 KiB)
[root@localhost tftpboot]#
二、通过C语言方式编程来实现
#include <stdio.h>
#include <unistd.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <errno.h>
#include <linux/if_ether.h>
#include <net/if.h>
#include <sys/ioctl.h>
#include <string.h>
#define ETH_NAME "eth1"
int do_promisc(void) {
int f, s;
struct ifreq ifr;
if ( (f=socket(PF_PACKET, SOCK_RAW, htons(ETH_P_ALL)))<0){
return -1;
}
strcpy(ifr.ifr_name, ETH_NAME);
if ((s = ioctl(f, SIOCGIFFLAGS, &ifr))<0){
close(f);
return-1;
}
if(ifr.ifr_flags & IFF_RUNNING){
printf("eth link up\n");
}else{
printf("eth link down\n");
}
ifr.ifr_flags |= IFF_PROMISC;
if ((s = ioctl(f, SIOCSIFFLAGS, &ifr)) < 0){
return -1;
}
printf("Setting interface ::: %s ::: to promisc\n\n", ifr.ifr_name);
return 0;
}
int check_nic(void)
{
struct ifreq ifr;
int skfd = socket(AF_INET, SOCK_DGRAM, 0);
strcpy(ifr.ifr_name, ETH_NAME);
if (ioctl(skfd, SIOCGIFFLAGS, &ifr) < 0)
{
close(skfd);
return -1;
}
if(ifr.ifr_flags & IFF_RUNNING){
printf("link up\n");
close(skfd);
return 0; // 网卡已插上网线
}else {
printf("link down\n");
close(skfd);
return -1;
}
}
int main(void) {
do_promisc();
return 0;
}
‘拾’ C语言 socket编程 TFTP服务器与客户端的实现
TFTP是一个传输文件的简单协议,其于UDP协议而实现
socket是...我只能理解成是网络编程里面包含ip地址端口号的一个数据结构 具体我说不清楚
基础肯定是要先了解udp ,先要掌握用udp接腔肆收和发送数据行圆基,
然后基于udp的数据发送接收再根档谨据tftp协议的要求来写程序
这个里面有tftp的介绍
http://www.longen.org/S-Z/details-z/TFTPProtocol.htm