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